为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

假设你所说的 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 后,即可全部删除子节点。

17 回复 有任何疑惑可以回复我~
#1

Moomin6 提问者

var x=content.childNodes; for(var i=x.length-1; i>=0 ; i++){ content.removeChild(x[i]); } 你好呀 是这个代码从后面一个一个删除呢 当时是我写错了 忘记把i++换成i-- 结果发现竟然能倒着删除 可是i++以后是比x的长度越来越长的 为什么它还能够删除那五个节点呢 还有谢谢你的解答呀 这也是我之前出错的地方
2018-10-13 回复 有任何疑惑可以回复我~
#2

迷茫中滚打

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

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信