老师请帮我解决一个问题:

老师请帮我解决一个问题:

<!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>

http://img1.sycdn.imooc.com//climg/5de5d07609bc10f305110095.jpg


如代码和上图所示,为什么正向删除节点需要操作好几次才能将节点完全删除,而逆向删除却可以一次删完,请问是为什么呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,关于同学的问题解答如下:

1、通过content.childNodes获取的不仅有元素节点,也有文本节点,所以ul跟li之间的换行符(文本节点)也被获取到了,我们可以打印出来看一下:

http://img1.sycdn.imooc.com//climg/5de611c9090444a307790044.jpg

2、我们先看同学粘贴的代码部分。在删除之前将hs打印出来看一下过程:

http://img1.sycdn.imooc.com//climg/5de610c309eeb3e605330152.jpg

当点击按钮时,控制台输出:

http://img1.sycdn.imooc.com//climg/5de6112b0982463107950230.jpg

发现当我们第一次点击按钮,for执行完毕之后,就只剩下元素节点,所以当我们第一次点击按钮后,页面的课程名称一个都没有被删除。当我们第二次点击按钮后,页面上被删除的只剩下php和jquery。之所以会有这样的现象见下图分析:

http://img1.sycdn.imooc.com//climg/5de614a0090ad4ff14910469.jpg

这是第一次点击按钮发生的事情,第一次点击按钮后,content里面的元素如下:

http://img1.sycdn.imooc.com//climg/5de614de0970b35a04230034.jpg

当我们第二次点击按钮的时候,原理同第一次:

http://img1.sycdn.imooc.com//climg/5de616680918d66813830236.jpg

元素的索引动态发生变化,所以当执行完毕后就只剩下php和jquery:

http://img1.sycdn.imooc.com//climg/5de6154b09c9101504490129.jpg

第三次点击按钮同理。所以同学才不能正确的删除节点。

2、再看同学图片上的代码,当倒着删时,永远都删除的是最后一个节点,所以可以正常删除:

http://img1.sycdn.imooc.com//climg/5de616be097a199e05550143.jpg

控制台过程:

http://img1.sycdn.imooc.com//climg/5de617260982139708950341.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 秋之枫华 提问者 #1
    解释的太好了,看一遍立马就懂了,那假如我平时遇到类似的需求时,怎样才能避免(或者是想起来)这个问题呢?
    2019-12-03 21:31:04
  • 好帮手慕粉 回复 提问者 秋之枫华 #2
    同学你好,这个是需要积累的,同学可以刻意的记一下,凡是动态添加或者删除的使用for循环就可能有问题,以后遇到的时候多留心一下。编程就是要多踩坑才能知道怎么避免这些坑。如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
    2019-12-04 09:43:58
  • 秋之枫华 提问者 回复 好帮手慕粉 #3
    谢谢老师,爱死你了!
    2019-12-04 12:47:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师