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

JavaScript进阶篇的9-14节里面的问题

JavaScript进阶篇的9-14节里面的问题

巽易3821995 2016-10-09 18:15:00
试过是倒着删可以,顺着不行,然后看下面评论说是因为删除之后下面的节点自动排上来,会删一个漏几个,那么原来的var childNode = content.childNodes[i]; content.removeChild(childNode);如果我把i改成1var childNode = content.childNodes[1]; content.removeChild(childNode);结果还是会漏,到底是怎么一回事呢?这个实在搞不懂,后来我也试过把body里面的标签合成一排,怕可能是h1之间也算节点的问题,结果还是这样,我把循环的i<content.childNodes.length加了几个循环下去倒是能一次删掉。
查看完整描述

1 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

主要是因为length是根据删除节点后不断变化的;

如果正着写:

for(var i=0;i<content.childNodes.length;i++){  //如果for循环这么写

我先假设你content.childNodes.length为5,以下用length表示;
i=0时,i<content.childNodes.length(也就是i<5),i++,执行content.removeChild(childNode);这时因为删除了一个节点,所以content.childNodes.length为5-1=4;
i=1时,i<4,执行删除语句;这时length为4-1=3;
i=2时,i<3,执行删除语句;这时length为3-1=2;
i=3时,i<2,false,不执行,退出循环;
因此只要for循环正着写,如果length为5,for循环里面的语句只能执行3次,自然不能一次清除;
如果倒着写:

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

当你点击触发,i的值是content.childNodes.length-1,条件是只要i>=0,就可以执行语句,因此这里i能执行到i=0;

因此倒着写这种写法下点击按钮所有节点全部删除


查看完整回答
反对 回复 2016-10-09
  • 1 回答
  • 0 关注
  • 1032 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信