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