我遇到了一个简单的问题。
我首先创建了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]); 这两种方法。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
把 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也不一定能对上,这种写法是错的