为了账号安全,请及时绑定邮箱和手机立即绑定

为什么是for(var i=x.childNodes.length-1;i>=0;i--)

function clearText() {

  var x=document.getElementById("content");

  for(var i=x.childNodes.length-1;i>=0;i--){

      var childNode=x.childNodes[i];

      x.removeChild(childNode);

  }  

}


正在回答

1 回答

 for(var i=x.childNodes.length-1;i>=0;i--)这句是要倒着删除,这个应该能理解吧

这个练习题正着删除倒着删除都能做,倒着删除相比不用考虑太多,正常写就好,因为总是从最后一个删除,正着删除的话需要从第一个删除,也就是

for(var i=0;i<x.childNodes.length;i++){

      var childNode=x.childNodes[0];//总从第一个删除

      x.removeChild(childNode);

  }

如果按

for(var i=0;i<x.childNodes.length;i++){

      var childNode=x.childNodes[i];

      x.removeChild(childNode);

  }  

这种写法,会漏删,导致一次删不干净。

比如childNode读出来{h1,h2,h3,h4,h5}

然后i=0,删了h1,没问题,继续

i=1,此时childNode变成了{h2,h3,h4,h5},删除childNode[1],就是删除了h3

这里就看出来了吧,会漏删,i=3的时候就没东西可删了,然后这次循环就结束了,但是还有h2,h4被漏下来了。


3 回复 有任何疑惑可以回复我~
#1

kuban

更正一下,如果a=x.childNodes.length,for(var i=0;i<a;i++)这种写法,i=3时没东西删,就停住了 for(var i=0;i<x.childNodes.length;i++)这种写法,i=3时,x.childNodes.length=2,退出循环了。 childNode读出来的内容是我为了看的清楚假设的,实际IE下是{h1,h1,h1,h1,h1},其他浏览器是{text,h1,text,h1,text,h1,text,h1,text,h1,}
2016-04-27 回复 有任何疑惑可以回复我~
#2

listenlo 提问者

非常感谢!
2016-04-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么是for(var i=x.childNodes.length-1;i>=0;i--)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信