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

为什么这样写不能一次性删除完整,而且点击一次没反应,点击第二次删除html、javascript、jQuery,点击第三次删除java,点击第四次删除php???怪事!!

这是我的代码:


正在回答

2 回答

简单,因为删除了子节点后,后面的子节点会自动替补上空缺,删了第一个,原来的第二个就变了第一个。所以应该每次删除的都是第一个,不应该删除第i个,因为i在变化,而你始终要从第一个开始删除。

另外,初始条件也不能是i=0,i++。假设你删了第一个,i就变成了1,那么下一次你删除的就是剩下的所有子节点中的第二个,第一个被你漏掉了啊。在下一次i=2,你删除的就是子节点集合里的第三个了。所以要这么改:

<script type="text/javascript">
function clearText() {
  var content=document.getElementById("content");
    for(var i=content.childNodes.length;i>0;i--){ //一共有几个就要删几次,删到0为止
      var  x=content.removeChild(content.childNodes[0]);//每次都删第一个
      x=null;
  }  
}
</script>


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

慕勒9330939

比楼上好理解多了233
2016-12-14 回复 有任何疑惑可以回复我~
#2

进击君 回复 慕勒9330939

谢谢~加油~
2016-12-14 回复 有任何疑惑可以回复我~
#3

qq_火兹_03896205

您好,我刚刚试了你的代码,为什么点击一次时子节点全部删除了呢,我正琢磨着怎么一个一个删除,看了你的代码,运行时点击一次,全部删除了。
2016-12-30 回复 有任何疑惑可以回复我~
#4

进击君 回复 qq_火兹_03896205

因为写了个循环,遍历了所有元素,所以循环结束后就全部删掉了。如果要点击一次删除一个,把循环去掉就行
2016-12-31 回复 有任何疑惑可以回复我~
#5

利木 回复 qq_火兹_03896205

我也试了,也是一次性全部删除了……
2017-01-25 回复 有任何疑惑可以回复我~
查看2条回复

1.因为空格键也算一个结点,第一次点击是删除的是空格键的空结点,这可以在每个标签加上个数字去试试看。

2.要注意在删除节点同时,content孩子节点的个数和位置也在变化,

不要把i<content.childNodes.length做为判断条件,举例说明,IE下执行,节点个数5个,当我点一次删除按钮。

注意:5个节点分别对应下标是从0开始:    1[0]         2[0]         3[0]           4[0]          5[0] 

i=0     content.childNodes.length=5      0<5  删除第一个节点后,继续循环

i=1     content.childNodes.length=4      1<4   删除第二个节点后,继续循环

i=2     content.childNodes.length=3       2<3   删除第三个节点后,继续循环

i=3   content.childNodes.length=2          3<2  不成立,所以不继续。

这也就是为什么一次删除不了所以节点,且第二次点击删除html、javascript、jQuery,点击第三次删除java,点击第四次删除php


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

慕粉4340077 提问者

谢谢,虽然还是不太明白。我再琢磨会
2016-12-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这样写不能一次性删除完整,而且点击一次没反应,点击第二次删除html、javascript、jQuery,点击第三次删除java,点击第四次删除php???怪事!!

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