2014-11-03 134 views
0

我想刪除具有用戶指定的特定名稱屬性的節點。我究竟做錯了什麼?讓我們坐着用戶輸入:「貓」,並且每當系統發現具有屬性cat的動物時,它就刪除它。動物節點沒有孩子。通過屬性值刪除節點的XML JavaScript

這是.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 
      } 
     } 
    } 
} 
+0

函數中的局部變量應該用'var'聲明。 – Pointy 2014-11-03 16:44:38

回答

2

<animal>節點不在XML DOM頂級節點的孩子,所以xmlDoc.removeChild()將無法​​正常工作。

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

這就是說,你可能會遇到困難,由於該節點列表從getElementsByTagName()返回的事實是現場。當你刪除元素時,列表會縮小,你會跳過一些。你可以改變循環來處理:

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++; 
}