关于用javascript删除结点的问题

Next_Jobs 发布于 2012/08/18 20:08
阅读 716
收藏 0
我是想实现一个用javascript删除一个结点的除第一个子节点的全部子节点,我的想法是把他的子节点全部删除,再将第一个子节点加上,但是但我删除全部子节点的时候出现了错误。我的代码是:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function clearText() {
var content=document.getElementById("content");
for (var i=0; i<content.childNodes.length; i++) {
	alert(content.childNodes.length);
 var childNode = content.childNodes[0];
 content.removeChild(childNode);
}
}
</script>
</head>  

<body>
<div id="content">
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
<h1>4</h1>
<h1>5</h1>
<h1>6</h1>
</div>
<button onclick="clearText();">清除节点内容</button>
</body>
</html>

但是它只删除了前三个结点,其余的没有删除。求大牛指点!!!

以下是问题补充:

@Next_Jobs:我在for循环里面有写alert(content.childNodes.length),我发现刚开始的时候等于13,当等于6的时候就不再循环了,为什么啊,我的for循环还没有结束呢啊 (2012/08/18 20:18)
加载中
0
王昊然
王昊然

问题出在循环次数上,你这样写每次都会计算数组的长度,改成如下即可

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

 

Next_Jobs
Next_Jobs
这位大神的代码我是过来,虽然有问题,但是受到你的启发,我在for循环外面求得这个长度,在带进来,结果就成功了!!!谢谢
0
樂
用Jquery不更好点,不用自己写了吧
0
许红燕
许红燕

如果为了不显示content的内容可以这样

document.getElementById("content").style.display="none";

0
云恋夕落
var content=document.getElementById("content");
    var firstC=content.firstChild;
    while(firstC.nodeType!=1&&firstC.nextSibling!=null){
        firstC=firstC.nextSibling;
    }
    //alert(firstC.firstChild.nodeValue);
    while(firstC.nextSibling){
        var nexts=firstC.nextSibling;
        var parent=nexts.parentNode;
        parent.removeChild(nexts);
    }
0
刘青山
function clearText() {
  var content=document.getElementById("content");
  for (var i=content.childNodes.length-1; i>=0; i--) {
    alert(content.childNodes.length);
    var childNode = content.childNodes[0];
    content.removeChild(childNode);
  }
}


0
陈袁at互联
陈袁at互联

我也是初学者,为什么它的

 

content.childNodes.length

为13呢?
0
只会百度的程序员
只会百度的程序员

引用来自“cheng222e”的答案

我也是初学者,为什么它的

 

content.childNodes.length

为13呢?

6个h1标签+6个数字文本元素+1个换行的空文本元素 = 13个子节点

返回顶部
顶部