i=contnet.childNodes.length-1和i=0;i<content.childNodes.length的區(qū)別
在寫循環(huán)的時候
參考答案是:for(i=content.childNodes.length-1;i>=0;i--)
我寫的是:for(i=0;i<content.childNodes.length;i++)
其他部分都一致,結果我的點擊三次才能全部刪除,參考答案寫法一次就能實現(xiàn),請問這個是有什么原因嗎?
在寫循環(huán)的時候
參考答案是:for(i=content.childNodes.length-1;i>=0;i--)
我寫的是:for(i=0;i<content.childNodes.length;i++)
其他部分都一致,結果我的點擊三次才能全部刪除,參考答案寫法一次就能實現(xiàn),請問這個是有什么原因嗎?
2016-05-01
舉報
2016-05-01
在執(zhí)行var x=removeChild(child[i])后,x后的節(jié)點會自動向前移,占據x節(jié)點的位置,導致位置發(fā)生變化(前移1),所以再次removeChild(child[i])的時候,會跳過一個節(jié)點。
如:x,y,z? ? 此時i=0,執(zhí)行removeChild后,i=1,而節(jié)點數組變?yōu)椋簓,z;此時下次循環(huán)將刪除z而不是y,從而導致y被遺漏。
2016-05-01
這個練習題正著刪除倒著刪除都能做,倒著刪除相比不用考慮太多,正常寫就好,因為總是從最后一個刪除,正著刪除的話需要從第一個刪除,也就是
for(var i=0;i<x.childNodes.length;i++){
? ? ? var childNode=x.childNodes[0];//總從第一個刪除
? ? ? x.removeChild(childNode);
? }
如果按a=x.childNodes.length
for(var i=0;i<a;i++){}這種寫法,會漏刪,導致一次刪不干凈。
比如childNode讀出來{h1,h2,h3,h4,h5}
然后i=0,刪了h1,沒問題,繼續(xù)
i=1,此時childNode變成了{h2,h3,h4,h5},刪除childNode[1],就是刪除了h3
這里就看出來了吧,會漏刪,i=3的時候就沒東西可刪了,然后這次循環(huán)就結束了,但是還有h2,h4被漏下來了。
同理,如果按for(var i=0;i<x.childNodes.length;i++)這種寫法,i=3時,x.childNodes.length=2,退出循環(huán)了,也出現(xiàn)漏刪了,所以會出現(xiàn)一次刪不干凈,需要多次刪除的狀況了