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

为什么把return x注释掉之后 点一次按钮没有反应,点第二次就直接删了三个节点,求大佬指点一下

<!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 (var i =0;i<content.childNodes.length;i++){

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

      x = null

      return x

  }

  

}

</script>


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


</body>

</html>


正在回答

2 回答

<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 回复 有任何疑惑可以回复我~

你这是经典的错误写法。

第一,每删除一个节点,content.childNodes.length的值会变化(减少),导致循环提前终止。

点击一次按钮,就只会删除一半的节点,因为i在增加的同时,content.childNodes.length却在减少。

第二,第一次点按钮不是没反应,而是因为存在空白节点,第一次执行删除了所有的空白节点。第二次点按钮,删除了一半的非空节点。

修改:

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

保证循环执行11次(6个空白节点,5个非空节点),每次删除第一个节点后,原来的第二个节点就变成了第一个节点。

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

举报

0/150
提交
取消

为什么把return x注释掉之后 点一次按钮没有反应,点第二次就直接删了三个节点,求大佬指点一下

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