问答详情
源自:9-14 删除节点removeChild()

看有的同学是正序循环的解法,求大佬解答

for(var i=0;i<content.childNodes.length;i++){
      if(content.childNodes[i].nodeType!=1){  
         continue; 
      }else{
         content.removeChild(content.childNodes[i]);   
      }
        
      }


这个试了下结果,没问题,不过有个地方想不明白,这个i<content.childNodes.length,这个 content.childNodes.length不是动态变化的吗,因为每次删除一个节点,这个content.childNodes.length就变小了,那岂不是没法遍历完所有的节点?比如有四个节点,i=0的时候,content.childNodes.length是4, i=1的时候,content.childNodes.length就是3了, i=2的时候,content.childNodes.length就是2了,循环就没了,最后的节点压根没遍历到呀。

提问者:慕神0996557 2019-03-14 10:06

个回答

  • 慕田峪2370816
    2019-03-18 21:43:52
    已采纳

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

          if(content.childNodes[i].nodeType!=1){

      document.write("当i为:"+i+"&nbsp;");

      document.write("长度为:"+content.childNodes.length+"<br>");

             continue;  

          }else{

             content.removeChild(content.childNodes[i]); 

    document.write("当i为:"+i+"&nbsp;");

    document.write("长度为:"+content.childNodes.length+"<br>"); 

          }

    通过这样输出,你就可以看出长度是递减的,i是递增的,存在空白节点,删除一个元素节点,空白节点就会顶上位置。这里最后会留下空白节点(本身这里的if判断就把空白节点留下了)

  • 慕UI3541772
    2019-03-27 18:18:25

    可以判断数组长度,重置i=-1,确保再次循环i=0, 进而删除所有节点;

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

          content.removeChild(childNodes[i]);

          x=null;

          if(childNodes.length>0){

             // alert(i+"长度"+childNodes.length);

              i=-1;

          }


  • LouisDuan
    2019-03-25 11:25:32

    实现了结果,不知道科学不科学

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

      // 在此完成该函数

      mylength=content.childNodes.length;

      for (var i=1; i<mylength; i++){

        content.removeChild(content.childNodes[i]);  

      }

      

    }

    </script>

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

    </body>

    </html>


  • 慕神0996557
    2019-03-15 09:22:26

    你直接试试log就能看出来,如果没有前面的if条件,实际上是根本遍历不了所有节点的。如果我猜的没错的话,之所以能遍历,并不是因为i一直是0,而是有空节点,那个length会隔一次减1,不会一直减1.并且如果我这个题目要求的删除所有的子节点,包括空白节点,那这个答案就是错的。


  • 阳火锅
    2019-03-14 15:01:14

    i不会变,i始终是0  只有content.childNodes.length长度会变