为什么for循环那里的i - - 换成 i + + 就可以倒着一个一个删除呢?而i - - 是一次性全部删除。

来源:9-14 删除节点removeChild()

Moomin6

2018-10-12 14:47

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</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 x=content.childNodes;
  for(var i=x.length-1; i>=0 ; i--){
      content.removeChild(x[i]);
  }
}
</script>

<button onclick="clearText()">清除节点内容</button>

</body>
</html>


写回答 关注

1回答

  • 迷茫中滚打
    2018-10-12 19:25:40

    假设你所说的 i++ 是下面这个:

    var x=content.childNodes;
      for(var i=0; i<x.length ; i++){
          content.removeChild(x[i]);
      }

    上面代码实现的效果也不是一个一个地删除,而是跳着删除。如点按钮一下,下面 5 个标签中的 1、3、5 会先删除,再点按钮一下才会把剩下的 2 删除,第三次按钮才把 4 删除。

    <h1>html</h1>         // 1     
    <h1>php</h1>          // 2    
    <h1>javascript</h1>   // 3        
    <h1>jquery</h1>       // 4    
    <h1>java</h1>         // 5

    因为当先把第一个子节点删除后,后面的子节点的索引就重新编号了:原来的第2个子节点会变成第1个子节点,第3个子节点会变成第2个子节点,但循环变量 i 是从 0、1、2... 顺序增长,所以会出现上述跳着删除的现象。

    但“i--”(如你所写的代码)的情况下是从最后一个子节点开始删除,并不会影响前面子节点的索引值,所以一次遍历完 i 后,即可全部删除子节点。

    迷茫中滚打

    理论上应该是溢出报错的了,假如强制执行的话,还是会每次点击按钮只删除最后那个子节点,这样表面看起来是倒着一个一个删除了,本质过程我也不太了解,哈哈。。

    2018-10-13 22:09:10

    共 2 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468061 学习 · 21891 问题

查看课程

相似问题