从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));
});
答案 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"));
希望它可以帮助你:)