我遇到了一个简单的问题。
我首先创建了DIV节点,并添加了自定义的属性 _index 。
var element = document.createElement('div');
element.innerHTML = index; //index类型为数字,为需要的信息。
element._index = index;
然后将这些(多个)创建的节点添加到另一个ID属性为'testdiv'的DIV节点中。
document.getElementById('testdiv').appendChild(element);
后来需要根据自定义属性 _index 来判断该节点是否符合条件,进行removeChild的操作。
current = [1,2,4,5,6,8];//current为需要删除的节点的属性 _index 所满足的值
...
...
var divs = document.getElementById('testdiv').childNodes;
var j=0;
for(i in divs)
{
if(divs[i]._index == current[j])
{
var node = divs[i];
node.parentNode.removeChild(node); //**此处报错**
}
else
j++;
}
报错图片如下。
问一下为什么会有错误。是不是因为“动态”(我不太了解)的原因?
我还想问一下removeChild是不是只有 node.parentNode.removeChild(node); 和 node.removeChild(node.childNodes[i]); 这两种方法。
把 for...in 循环改成 for (;;) 形式的循环就可以了,报错是因为 childNodes 里有个 length 也是 enumerable 的(可以被 for...in 枚举出来)
或者添加
divs.hasOwnProperty(i)
来判断。Node.removeChild
是移除 Node 的指定子节点的方法:node.parentNode.removeChild(node)
是移除 node 自身。node.removeChild(node.childNodes[i])
是移除 node 的子节点。