JS中物件的迴圈刪除問題
業務說明:對頁面元素名稱為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,迴圈結束。
最後的結果是全部刪除。