2010-11-24 21 views
3

($アヤックスで)のように、私はremoveempty、私はappendでそれを試してみてください 、いくつかのノードを削除したり、jQueryを使ってXMLでいくつかのノードを追加したいが、それらのすべてが動作しないように見える:

success:function(xml){ 
    $(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>'); 
    $(xml).find("layout").empty(); 
} 

Googleにはチュートリアルがありません。 jqueryでxmlのノードを追加または削除することは可能でしょうか?

OK、私はここで、データベース/ UserConfigに/ config.xmlに は私Ajaxコードあるとしてだけでローカルドメインに保存し、詳細でxmlファイルをそれを書く:

function layout_change() 
{ 
    var $children=$input.children(); 

    $.ajax({ 
     type: "get", 
     url: "Database/UserConfig/config.xml", 
     dataType: "xml", 
     timeout: 2000, 
     beforesend:function(xml){ 
      $(xml).find("layout").empty(); 
     }, 
     success:function(xml){ 
      for(var i=0;i<$children.length;i++) 
      { 
       $(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');    
      } 
     }, 
     error:function(){} 
    }); 
} 

またはそれができますJavaScriptで行わのみのC#などのサーバー言語で行うことができます......ここ

が私のデモXMLです:??

<layout> 
     <app id="id-4"></app> 
     <app id="id-5"></app> 
     <app id="id-6"></app> 
     <app id="id-1"></app> 
     <app id="id-2"></app> 
     <app id="id-3"></app> 
</layout> 
+1

もしあなたがjavascriptで何かできるのであれば、できることは... jquery – kobe

+0

しかし、あなたはXMLファイル、テキストファイルをjavascriptから書いたり更新したりするべきではありません。主にDOMを操作し、データをフェッチして表示し、データを送信します。 – kobe

+0

xmlファイルを確認できますか? – Alex

答えて

8

jQueryは、JavaScriptを解析してXMLを操作するための素晴らしいツールです。実際、jQueryのajax APIはこれを念頭に置いて構築されています。dataType引数をxmlに設定することで、Ajax呼び出しの応答タイプを指定できるのです(ただし、この引数の場合は自動検出を試みます省略されている)。

"XML":dataType引数のためのjQuery $.ajax()ドキュメントから jQueryを介して処理することができ、XML文書を返します。

jQueryを使用してXMLを解析して操作することができます。 CSSセレクタを使用すると、サーバー側のXMLライブラリのXPathクエリと比べて素晴らしいことを追加する必要があります。

予想通りappendのような機能をオンザフライでノードを追加するときに、落とし穴があります仕事emptyながらremove:jQueryのは、何らかの理由(私は本当にこの掘り下げていない)のために、あなたのための要素を作成しませんXML構造体に追加するとき(これはHTML構造体でうまくいくが)。あなたは明示的にDOM要素またはjQueryオブジェクトとして自分自身をノードを作成し、appendを呼び出すことにより、簡単にこの問題を回避することができます

//Either of these will work 
var elem = document.createElement('app'); 
xml.find('layout').append(elem); // Appends <app></app> to <layout> 
xml.find('layout').append($('<app>')); // Does the same 

// You can also you use other manipulation functions such as `attr` 
xml.find('layout').append($('<app>').attr('id', 'ego')); 

それはそれを阻止することになるあなたのコードと他の問題があること、しかし、のように見えます期待どおりに行動することができません。たとえば、$.ajaxbeforeSendコールバックは、XMLHttpRequestオブジェクトをコールバック関数に渡しますが、操作するXMLオブジェクトではありません。その結果、そのコールバックのemptyコールは何もしません。

また、beforeSendコールバックでDatabase/UserConfig/config.xmlの応答を操作しようとしている場合は、beforeSendが呼び出されてからajax要求が呼び出されないため、まだ存在していない可能性があります。あなたが渡そうとしていた引数xmlはグローバルにスコープされていた可能性がありますが、jQueryは前述のようにXMLHttpRequestを渡しているのでコールバックの範囲で潰れてしまいます。

+0

ありがとう、ありがとう私はたくさん! – hh54188

関連する問題