首页 > Javascript DOM removeChild如何删除 自定义属性 满足条件的子节点

Javascript DOM removeChild如何删除 自定义属性 满足条件的子节点

我遇到了一个简单的问题。
我首先创建了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 的子节点。

【热门文章】
【热门文章】