我正在尝试从元素#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行并警告节点,它会警告所有节点。为什么在删除第一个孩子后它会停止循环?父母仍然存在。
答案 0 :(得分:2)
getElementsByClassName
会返回实时 NodeList。因此,当您从DOM中删除元素时,它也会从NodeList中删除,从而导致各种副作用。
您可以通过将NodeList转换为数组
来避免它们var Messages = [].slice.call(document.getElementById('LoginFormErrorWrapper').getElementsByClassName("FormErrorMessage"));