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

怎么点击第一下没有反应,然后再点击一下删除了3个,然后再点击依次删除一个

<!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");

  for(i=0;i<content.childNodes.length;i++)

  {

      var x=content.removeChild(content.childNodes[i]);

      x=null;

  }

}

</script>

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


正在回答

48 回答

我发现问题在于for循环里面的i值的变化,不是应该++,而是应该--;你们谈论了那么久,<script type="text/javascript">
function clearText() {
  var content=document.getElementById("content");
  // 在此完成该函数
  var o = content.childNodes.length;
  var i=0
  for(i = 1; i<o; i--){
      content.removeChild(content.childNodes[i]);
  }
}
</script>

这样问题就搞定了

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

空山骊语

嗯嗯,还是你这个方法有效
2016-05-17 回复 有任何疑惑可以回复我~
#2

在天一涯

为什么FOR里面I初始赋值为1
2018-02-12 回复 有任何疑惑可以回复我~

还有这个啊 高大上

0 回复 有任何疑惑可以回复我~

length不断改变,子节点的数组也在改变

0 回复 有任何疑惑可以回复我~

呵呵,,,

0 回复 有任何疑惑可以回复我~

给老师点赞 很清晰的讲解

0 回复 有任何疑惑可以回复我~

厉害,原来content.childNodes.length是个变量了!

0 回复 有任何疑惑可以回复我~

棒棒的!

0 回复 有任何疑惑可以回复我~

理解这个问题!看完置顶回答后再做个试验就一目了然!在每个空白处,原来不是没有文本么,自己输入文本,比如依次1-6!这时就会发现第一次点击按钮删除的是1-6这6个数字,然后再点击才删除的是前3个!对于第二次只是删除了前三个,就是楼上的置顶解释,因为动态变化。

function clearText() {
  var content=document.getElementById("content");
  // 在此完成该函数 
  var childnode=content.childNodes;
  var num=childnode.length; 
  //document.write(num);
  for(var i=0;i<num;i++){
      content.removeChild(childnode[i]); 
  }
}

这里再说明一下为何删除1-6!我的代码中childnode=content.childNodes,这里childnode其实是c++中引用的意思,也就是他只是别名,是没有内存空间的,与下面的num=childnode.length不同,这个num是不会再随着节点的动态变化而变化了,因为他有自己的空间,且空间中存储了相应的值,你不去做变动,它是不会变化的。而前面的childnode由于是引用,也就是他本质是content.childNodes的值,是动态变化的,也就是这里的子节点在动态变化!这样子节点每次删除一次后前移1个,i又加1刚好就是全部删除的都是文本,也就是我这里加入的1-6!

至于删到6循环停止了,那就是再往后循环在继续,已经没有可以删除的东西了,所以看到的效果是只删除到最后一个文本了,但实际循环还是做满了11次停止,之后后面没内容了!

说了这么多,就这样吧!再多说自己也晕了,按规范搞法就行,想这么多没有意义!

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

qq_紫牛_1

这个代码运行之后还是不能一次全部删除啊
2016-01-27 回复 有任何疑惑可以回复我~
#2

prettywinter 回复 qq_紫牛_1

function clearText() { var content=document.getElementById("content"); // 在此完成该函数 var childnode=content.childNodes; var num=childnode.length; //document.write(num); for(var i=0;i<num;i++){ content.removeChild(childnode[0]); } }
2016-02-17 回复 有任何疑惑可以回复我~
#3

逃离星球 回复 prettywinter

请问为什么应该content.removeChild(childnode[0]); 而不是content.removeChild(childnode[i]); 0和i搞不懂啊啊
2016-04-05 回复 有任何疑惑可以回复我~
#4

空山骊语 回复 qq_紫牛_1

我也是
2016-05-17 回复 有任何疑惑可以回复我~
#5

素本往后

不太明白,为什么都是循环前存了变量的值,为什么num有自己的空间而childNode没有
2016-12-03 回复 有任何疑惑可以回复我~
#6

qq_四月天_10 回复 逃离星球

因为循环一次删除一个后,下一次循环原来位置1就就变为位置为0的元素了。这样每次删除content.removeChild(childnodes[0]),循环完毕就都删除了,就实现了一次性删除。 如果设为i,由于每次数组变化,实际就无法删除所有子节点。
2017-02-10 回复 有任何疑惑可以回复我~
#7

于Sir_

太棒了 完全讲清楚因为动态的原因导致 而放在外边就变为静态
2017-05-25 回复 有任何疑惑可以回复我~
#8

慕仙8142370 回复 逃离星球

我的理解,类似于堆栈,我们从上到下排列,最底下那个元素是n[0],依次往上是n[1]、n[2],当删除了n[0],相当于把最底下那个抽走了,那倒数第二个n[1]就降到最底下,变成了n[0],所以每次删除的是n[0]的时候,能保证一直删到最后一个。
2018-01-15 回复 有任何疑惑可以回复我~
查看5条回复

到时候学JQ之后,写法会变得好高大上。一句搞定

0 回复 有任何疑惑可以回复我~

自己想了半天,原来是这个问题!  回答的非常详细,非常有帮助! 非常感谢

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

怎么点击第一下没有反应,然后再点击一下删除了3个,然后再点击依次删除一个

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