为什么remove()会在数组中每秒跳过一次

时间:2017-01-19 06:14:27

标签: javascript

我在页面上有100个跨度,并且使用javascript我想删除所有这些:

function removeElements(){

    var elementss = document.getElementsByTagName('span');
    for(var i=0; i<elementss.length; i++){

        elementss[i].remove();

    }

}

假设我有10个跨度

1,2,3,4,5,6,7,8,9,10

当我点击删除按钮时,我得到了这个:

2,4,6,8,10

如果我想更改innetHTML或值或其他东西,但是对于remove()它不起作用,它可以工作....

2 个答案:

答案 0 :(得分:2)

当你删除第一个元素时,原来的第二个元素是第一个元素,第三个元素是第二个元素,依此类推。

为了删除所有元素,

for(var i=elementss.length - 1; i >= 0; i--){
  elementss[i].remove();
}

这将在不改变原始顺序的情况下向后移除元素。

答案 1 :(得分:1)

由于getElementsByTagName返回live elements collection(HTMLCollection),因此当您删除元素时它将自动更新,因此它将跳过某些元素,因为元素位置正在更新。

因此,请以相反的顺序删除元素,以避免以最简单的方式跳过元素。

var i = elementss.length;

while(i--){
  elementss[i].remove();
}

对于IE支持,请使用removeChild()方法。

var i = elementss.length;

while(i--){
  elementss[i].parentNode.removeChild(elementss[i]);
}