试过是倒着删可以,顺着不行,然后看下面评论说是因为删除之后下面的节点自动排上来,会删一个漏几个,那么原来的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;
因此倒着写这种写法下点击按钮所有节点全部删除
添加回答
举报
0/150
提交
取消