JQuery appendTo方法覆盖XML文档中的现有节点

时间:2011-12-27 10:50:54

标签: jquery xml

从ajax调用中我得到一个看起来像这样的回复

<root>
    <node>
      <innerNode>value</innerNode>
   </node>

当我得到响应时,我将<node>节点保存在变量中,我修改它并尝试使用appendTo方法将其插回到xml文档中。但是appendTo用新节点覆盖任何现有节点。我做错了吗?

jquery代码看起来像这样

$.ajax({
    type:'GET',
    url: urlKat,
    async:false,
    success: function(d, textStatus, jqXHR){
        alert(jqXHR.responseText);
        variableXML = $.parseXML(jqXHR.responseText);

        testXML=$(variableXMLXML).find("innerNode").filter(":contains(value)").parent();
    },
    error: function(){
        alert("ERROR");
    }
});

testXML.find("innerNode").text(newValue);
variableXML.find("root).each(function(){
    $(testXML).appendTo($(this));
});

1 个答案:

答案 0 :(得分:0)

这部分

testXML.find("innerNode").text(newValue);
variableXML.find("root).each(function(){
$(testXML).appendTo($(this));

您的代码和ajax代码将同时运行。 导致ajax调用需要几秒钟才能与服务器连接。

你应该把这部分放在成功之中:


EDIT :经过几个小时的工作,我终于意识到testXML不是重复数据,但是表明&lt; node&gt;通过引用对象。这意味着,jQuery appendTo不会覆盖现有节点。运行此行时会更改 -

testXML.find("innernode").text('newValue');

我也很困惑,但是当我试着用HTML明智地思考它时,它变得容易了。
无论如何,您应该在进行任何更改之前复制节点。

试试这个:

testXML = $(variableXML)
              .find("innernode")
              .filter(":contains(value)")
              .parent()
              .clone(); //duplicate node before change value

并更改值

testXML.find("innernode").text('newValue');

最后附上它 请注意,您不需要使用“each”进行迭代 jQuery会自动找到所有&lt; root&gt;元素并将新元素附加到它们。

$(testXML).appendTo($(variableXML).find("root"));

希望它可以帮助你:)