JS中对象的循环删除问题

来源:互联网 发布:linux faikmm 编辑:程序博客网 时间:2024/05/24 13:28

业务说明:对页面元素名称为subCheck的所有元素循环删除。

错误代码如下:

var eles=document.getElementsByName("subCheck");

for(var =1,i<eles.length;i++){

var ele=eles[i];

$(ele).remove();

}

针对以上代码,若eles的长度为4的话,实际情况只能删掉2个。这是因为JS在删掉一个元素的同时,将eles集合中的元素同时删掉。也就是说被循环的集合是动态的。

比如,原eles[A,B,C,D]

第一次循环前   eles=[A,B,C,D]   i=0;  获得 ele=A,删除掉A 

第二次循环前   eles=[B,C,D]          i=1; 获得 ele=C ,删除掉C

第三次循环前   eles=[B,D]  i=2;这时i的值已经大于eles集合的长度,不再进入循环。

最后的结果就是只删除掉了部分元素。


正确的代码为:

var eles=document.getElementsByName("subCheck");

for(var =eles.length-1,i>=0;i--){

var ele=eles[i];

$(ele).remove();

}

针对以上代码,比如,原eles[A,B,C,D]

执行过程为:

第一次循环前   eles=[A,B,C,D]   i=3;  获得 ele=D,删除掉D 

第二次循环前   eles=[A,B,C]          i=2; 获得 ele=C ,删除掉C

第三次循环前   eles=[A,B]  i=1; 获得 ele=B, 删除掉B 

第三次循环前   eles=[A]  i=0; 获得 ele=A, 删除掉A 

此时i=-1,循环结束。

最后的结果是全部删除。


原创粉丝点击