JS中对象的循环删除问题

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,循环结束。

最后的结果是全部删除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值