老师请帮我解决一个问题:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>删除节点removeChild()</title> </head> <body> <div id="content"> <h1>html</h1> <h1>php</h1> <h1>javascript</h1> <h1>jquery</h1> <h1>java</h1> </div> <script type="text/javascript"> function clearText() { var content=document.getElementById("content"); var hs=content.childNodes; // console.log(hs[1]); var len=hs.length; // console.log(len); for(var i=0;i<len;i++){ content.removeChild(hs[i]) } } </script> <button onclick="clearText()">清除节点内容</button> </body> </html>
如代码和上图所示,为什么正向删除节点需要操作好几次才能将节点完全删除,而逆向删除却可以一次删完,请问是为什么呢?
17
收起
正在回答
1回答
同学你好,关于同学的问题解答如下:
1、通过content.childNodes获取的不仅有元素节点,也有文本节点,所以ul跟li之间的换行符(文本节点)也被获取到了,我们可以打印出来看一下:
2、我们先看同学粘贴的代码部分。在删除之前将hs打印出来看一下过程:
当点击按钮时,控制台输出:
发现当我们第一次点击按钮,for执行完毕之后,就只剩下元素节点,所以当我们第一次点击按钮后,页面的课程名称一个都没有被删除。当我们第二次点击按钮后,页面上被删除的只剩下php和jquery。之所以会有这样的现象见下图分析:
这是第一次点击按钮发生的事情,第一次点击按钮后,content里面的元素如下:
当我们第二次点击按钮的时候,原理同第一次:
元素的索引动态发生变化,所以当执行完毕后就只剩下php和jquery:
第三次点击按钮同理。所以同学才不能正确的删除节点。
2、再看同学图片上的代码,当倒着删时,永远都删除的是最后一个节点,所以可以正常删除:
控制台过程:
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星