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

为什么一开始要按两下才开始删除节点,而且一下删除两个。后面就是按一下删除一个了?

<script type="text/javascript">function clearText() {  var content=document.getElementById("content");  var a=content.childNodes;  // 在此完成该函数  for(i=0;i<a.length;i++){      var r=content.removeChild(content.childNodes[i]);      r=null;  }  }</script>


正在回答

6 回答

加上

x = null;

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

我也是这样,后面想明白了。这是因为删除子节点的同时,子节点数组的数量也减少了。以你的代码为例,最开始a数组长度为11(包含了若干空值):["","html","","php","","javascript","","jquery","","java",""]

第一次点按钮时,for i=0时,删除了第一个空值。此时数组的第一个元素被删掉了,所以i=1时,删除的其实是第二个空值,一次类推,恰巧把所有空值给删除了,所以你点第一次按钮就看到没有任何变化!

当你第二次点按钮时,数组变成了):["html","php","javascript","jquery","java"]。同上,这次删除了html、javascript、java,所以剩下了php和jquery!

第三次点按钮,剩下了jquery。

第四次点按钮,才删完。

所以说,要一次性全删完,要改进算法。

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

粥可温Ni

牛皮,哈哈哈。我理解了
2021-05-22 回复 有任何疑惑可以回复我~

<script type="text/javascript">

// 清除空白节点

function cleanWhitespace(element)   

{   

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

    {   

        var node = element.childNodes[i];   

        if(node.nodeType == 3 && !/\S/.test(node.nodeValue))   

        {   

            node.parentNode.removeChild(node);   

        }  

    }   

}   

cleanWhitespace(document.getElementById("content"));


function clearText() {

  var content=document.getElementById("content");

  // 在此完成该函数

  var xchild=content.childNodes;

  for(i=0;i<xchild.length;i++){

     var xclose=content.removeChild(xchild[i]);

      xclose=null;

      return xclose;

  }

}

</script>

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


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

因为空白节点的问题,除了IE浏览器,其他浏览器都会计算空白节点,第一点执行了,只不过删除的是空白节点,你可以清除空白节点

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

我的是点击一下没反应,第二次点击他会直接删除三个。接来下就正常删除了,不知道为啥

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

function clearText() {

  var content=document.getElementById("content");

  // 在此完成该函数

  var sons = content.childNodes;

  for(var i=sons.length-1;i>0;i--){

      content.removeChild(sons[0]);

  }

  

}


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

举报

0/150
提交
取消

为什么一开始要按两下才开始删除节点,而且一下删除两个。后面就是按一下删除一个了?

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