2014-11-03 3 views
0

Я хочу удалить узел с определенным атрибутом имени, указанным пользователем. Что я делаю не так? Давайте сидим, пользователь вводит: «cat» и всякий раз, когда система находит животное с атрибутом 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

ответ

2

Ваши <animal> узлы не являются потомками узла верхнего уровня в XML DOM, так xmlDoc.removeChild() не будет работать.

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

Это говорит, вы, вероятно, столкнетесь с трудностями из-за того, что список узлов вернувшегося из getElementsByTagName() является живого. Когда вы удаляете элементы, список будет уменьшаться, и вы будете пропускать некоторые. Вы можете изменить цикл, чтобы иметь дело с этим:

Смежные вопросы