1. 程式人生 > >JS中物件的迴圈刪除問題

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,迴圈結束。

最後的結果是全部刪除。