假设我有两个XML内部字符串。像这样:
<playlist>
<item id="1">
...
</item>
</playlist>
和
<playlist>
<item id="2">
...
</item>
</playlist>
我想要获得的是:
<playlist>
<item id="1">
...
</item>
<item id="2">
...
</item>
</playlist>
然后我这样做:
oldPlaylist = $.parseXML(string1);
newPlaylist = $.parseXML(string2);
$(oldPlaylist).find('playlist').each(function(index,playlist) {
$(newPlaylist).find('item').each(function(index2,item) {
$(playlist).add(item);
});
});
answer = (new XMLSerializer()).serializeToString(oldPlaylist);
但它不起作用。答案与string1相同。我可以说,通过提供的示例,每次进入第一次,每次进入第二次(然后看起来它正确地读取了两个XML)。
你怎么看?你能帮助我吗?谢谢!答案 0 :(得分:4)
根据the documentation,add方法构造一个新的jQuery对象并返回它。它实际上并不会更改您调用该方法的对象。
所以答案与string1的字符串相同是正常的。
你可以沿着这些方向做点什么:
var oldPlaylist = $.parseXML(string1);
var newPlaylist = $.parseXML(string2);
$(newPlaylist).find('item').each(function(index,item) {
oldPlaylist = oldPlaylist.add(item);
});
answer = (new XMLSerializer()).serializeToString(oldPlaylist);
答案 1 :(得分:2)
在我看来,使用add()
是错误的。它只是将项添加到匹配元素集中......它不会将新的子元素插入树中。
相反,您需要append()
。并且append()
实际上修改了它正在操作的对象,因此您无需将结果分配给oldPlaylist
。
所以我会尝试像
这样的东西var oldPlaylist = $.parseXML(string1);
var newPlaylist = $.parseXML(string2);
$(oldPlaylist).find('playlist').each(function(index, playlist) {
$(newPlaylist).find('item').each(function(index2, item) {
$(playlist).append(item);
});
});
answer = (new XMLSerializer()).serializeToString(oldPlaylist);
我对此进行了测试,并提供了所需的answer
:
<playlist>
<item id="1"> ... </item>
<item id="2"> ... </item>
</playlist>
(为了清楚起见,添加了缩进。)