删除子节点会阻止其他兄弟节点被删除吗?

时间:2013-09-07 19:07:06

标签: javascript firefox-addon xul

我正在尝试从元素#LoginFormErrorWrapper中删除具有类.FormErrorMessage的所有子节点。如果这会产生影响,这些是XUL“描述”元素。

使用此代码:

var Messages = document.getElementById('LoginFormErrorWrapper').getElementsByClassName("FormErrorMessage");
for (var i = 0; i < Messages.length; i++) {
   var node = Messages[i];
   document.getElementById('LoginFormErrorWrapper').removeChild(node); 
}

仅删除第一个元素。消息包含所有元素,但是一旦删除第一个子节点,循环就会停止。如果我注释掉removeChild行并警告节点,它会警告所有节点。为什么在删除第一个孩子后它会停止循环?父母仍然存在。

1 个答案:

答案 0 :(得分:2)

getElementsByClassName会返回实时 NodeList。因此,当您从DOM中删除元素时,它也会从NodeList中删除,从而导致各种副作用。

您可以通过将NodeList转换为数组

来避免它们
var Messages = [].slice.call(document.getElementById('LoginFormErrorWrapper').getElementsByClassName("FormErrorMessage"));