归来仍是少年呀
2018-08-28 20:09
这是为什么呢
对了,我刚试过,我建议你这样可以一次删除所有元素:
var content = document.getElementById("content"); var h1s= content.childNodes; var length = h1s.length; for(var i = 0; i<length; i++) { content.removeChild(h1s[0]); } 这样就可以一直移除第一个节点了。移除11次。
因为下标更新了.
用b代表空白节点,那么ul之间的节点序列应该是:
b html b php b javascript b jquery b java b
第一次删除时,删除0号节点b,剩余html b php b javascript b jquery b java b
第二次删除时,删除1号节点b,由于此时节点已经更新, html变成0号节点,删除的还是html后面的节点b。与此同时,<li>标签节点的值也在增加,html变成0号,php变成1号,javascript变成2号节点,以此类推.因此第一次删除的是所有的空格。第二次删除html javascript java第三次删除js,第四次删除jquery.
也就是隔山打牛.
你应该把4改为content.childNodes.length,因为他实际上不止4个节点,在子节点中两个标签之间的空格或换行都被解析为一个子节点(文本节点)。比如:
<ul>
<li>慕课网</li>
</ul>
这一段代码就有3个子节点了
你的运行结果是只有 html 和php被删了吗 如果是的话 加一个判定条件应该就好了
for(var i=content.childNodes.length-1;i>=0;i--){
var x=content.childNodes;
if(x[i].nodeType==1){
content.removeChild(x[i]);
}
}
因为content 的长度其实是 11 不是 4 其中包括了几个空白节点
浏览器兼容问题,节点之间的空白符,在firefox、chrome、opera、safari浏览器是文本节点
JavaScript进阶篇
468745 学习 · 22132 问题
相似问题