Javascript DOM removeChild如何删除 自定义属性 满足条件的子节点
怪我咯
怪我咯 2017-04-10 15:03:16
[JavaScript讨论组]

我遇到了一个简单的问题。
我首先创建了p节点,并添加了自定义的属性 _index 。

    var element = document.createElement('p');
    element.innerHTML = index; //index类型为数字,为需要的信息。
    element._index = index;

然后将这些(多个)创建的节点添加到另一个ID属性为'testp'的p节点中。

    document.getElementById('testp').appendChild(element);

后来需要根据自定义属性 _index 来判断该节点是否符合条件,进行removeChild的操作。

    current = [1,2,4,5,6,8];//current为需要删除的节点的属性 _index 所满足的值
    ...
    ...
    var ps = document.getElementById('testp').childNodes;
    var j=0;
    for(i in ps)
    {
        if(ps[i]._index == current[j])
        {
            var node = ps[i];
            node.parentNode.removeChild(node); //**此处报错**
        }
        else
            j++;
    }

报错图片如下。

问一下为什么会有错误。是不是因为“动态”(我不太了解)的原因?

我还想问一下removeChild是不是只有 node.parentNode.removeChild(node); 和 node.removeChild(node.childNodes[i]); 这两种方法。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
黄舟

把 for...in 循环改成 for (;;) 形式的循环就可以了,报错是因为 childNodes 里有个 length 也是 enumerable 的(可以被 for...in 枚举出来)
或者添加 ps.hasOwnProperty(i) 来判断。

Node.removeChild 是移除 Node 的指定子节点的方法:
node.parentNode.removeChild(node) 是移除 node 自身。
node.removeChild(node.childNodes[i]) 是移除 node 的子节点。

怪我咯

i是数组元素不是index ,而且i和j也不一定能对上,这种写法是错的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号