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

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

这是我的代码:


提问者:慕粉4340077 2016-12-07 16:00

个回答

  • 进击君
    2016-12-09 00:39:08

    简单,因为删除了子节点后,后面的子节点会自动替补上空缺,删了第一个,原来的第二个就变了第一个。所以应该每次删除的都是第一个,不应该删除第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>


  • qq_MJ_7
    2016-12-07 17:03:54

    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