【问题标题】:XML deleting a node by attribute value JavaScriptXML 通过属性值 JavaScript 删除节点
【发布时间】:2014-11-03 16:41:16
【问题描述】:

我想删除具有用户指定的特定名称属性的节点。我究竟做错了什么?让我们坐着用户输入:“cat”,每当系统发现具有属性 cat 的动物时,它都会将其删除。动物节点没有子节点。

这是 .xml 文件的简化版

<animals>
    <animal name="elephant"></animal>
    <animal name="cat"></animal>
    ...    
</animals>

这是我从 xml 文件中删除特定节点的代码。

function delete() {
    xmlDoc = loadXMLDoc("file.xml");
    root = xmlDoc.getElementsByTagName("animal");

    for (i = 0; i < root.length; i++) {
        if (root[i].nodeType == 1) {
            if (root[i].attributes[0].value == document.getElementById("del").value) {
                xmlDoc.removeChild(root[i]);
                display(); // function displaying the results
            }
        }
    }
}

【问题讨论】:

  • 函数中的局部变量应该用var声明。

标签: javascript xml html removechild xmlnode


【解决方案1】:

您的 &lt;animal&gt; 节点不是 XML DOM 中顶级节点的子节点,因此 xmlDoc.removeChild() 将不起作用。

root[i].parentNode.removeChild(root[i]);

也就是说,由于从getElementsByTagName() 返回的节点列表是live,您可能会遇到困难。当你删除元素时,列表会缩小,你最终会跳过一些。您可以更改循环来处理:

for (var i=0; i<root.length; ) {
    if(root[i].nodeType==1 && root[i].attributes[0].value==document.getElementById("del").value) {
        xmlDoc.removeChild(root[i]);
        display(); // function displaying the results
    }
    else
        i++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多