猿问

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

试过是倒着删可以,顺着不行,然后看下面评论说是因为删除之后下面的节点自动排上来,会删一个漏几个,那么原来的

var childNode = content.childNodes[i];
content.removeChild(childNode);

如果我把i改成1

var childNode = content.childNodes[1];
content.removeChild(childNode);

结果还是会漏,到底是怎么一回事呢?这个实在搞不懂,后来我也试过把body里面的标签合成一排,怕可能是h1之间也算节点的问题,结果还是这样,我把循环的i<content.childNodes.length加了几个循环下去倒是能一次删掉。

巽易3821995
浏览 1033回答 1
1回答

stone310

主要是因为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;因此倒着写这种写法下点击按钮所有节点全部删除
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答