JS中对象的循环删除问题
2017-09-11 16:56
176 查看
业务说明:对页面元素名称为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,循环结束。
最后的结果是全部删除。
错误代码如下:
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,循环结束。
最后的结果是全部删除。
相关文章推荐
- JS中对象的循环删除问题
- 在jsp的c标签循环后台对象属性的情况下,使用js提取其中一个id属性使用ajax传到后台删除
- js数组循环删除元素或对象
- 在jsp的c标签循环后台对象属性的情况下,使用js提取其中一个id属性使用ajax传到后台删除
- js遍历数组时删除指定对象出现问题
- 原生js解决对象事件处理程序添加和删除的兼容性问题
- JS动态添加与删除select中的Option对象(示例代码)
- 细品JS的寻址,闭包,对象模型和相关问题
- js循环动态绑定带参数函数遇到的问题及解决方案[转]
- js为空或不是对象问题的快速解决方法
- Tomcat使用Spring管理对象出现HashMap死循环的问题
- JS和jquery的几个令人迷惑的问题之二(语句和对象)
- ie8 js编译器对象为空或不是对象的一个小问题
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
- hibernate删除父对象提示子对象有记录的问题
- 约瑟夫环:每隔两个循环删除数组元素,求最后删除者的下标问题
- 使用foreach 循环删除DataRow的时候的问题
- Android WebView JS不能调用Java对象的问题
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
- python类中显示重写__del__方法,引起循环引用的对象无法释放,造成垃圾泄露问题