我的xml文件如下:
它包含不同的“对象”节点,在不同的对象中有不同的参数,一个是删除参数。
我想删除包含已删除参数1的所有“对象”节点。
这是删除具有参数节点deleted = 1的节点对象的代码:
x=xmlDoc.documentElement;
for(var count=0; count<5;count++){
var y=x.getElementsByTagName("deleted")[count]; //Find that nodes arent
if(y.textContent == "1") {
var z=y.parentNode; //delete the node from the parent.
x.removeChild(z);
Xml2String1= new XMLSerializer().serializeToString(x);
}
}
答案 0 :(得分:0)
你的循环不正确:
for(var x1=0; x1<5;x1++){
var y=x.getElementsByTagName("deleted")[x1];
您的循环运行5次迭代,而不考虑找到<deleted>
个元素的数量。每次循环时,您再次搜索并获得剩余<deleted>
元素的新NodeList/HTMLCollection,但无论如何,循环计数器都会递增。
请改为尝试:
var deletedNodesList = x.getElementsByTagName("deleted");
var nodesToDelete = [];
for (var index = 0; index < deletedNodes.length ; index += 1)
{
var node = deletedNodes[index];
if (node.textContent == "1")
{
nodesToDelete.push( node.parentNode ); //delete the node from the parent
}
}
nodesToDelete.forEach( function() { x.removeChild(this); } );
请注意,根据MDN上的文档,NodeList是 live 集合,因此在处理它时不要修改它。
<小时/> PS。 我的第二个raam86建议使用理智的(有意义的)变量名。有意义的变量名称使代码更容易理解,这使得编写正确的代码和解决错误代码中的问题变得更加容易。