老师请帮我解决一个问题:
<!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 星