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了,循环就没了,最后的节点压根没遍历到呀。
for(var i=0;i<content.childNodes.length;i++){
if(content.childNodes[i].nodeType!=1){
document.write("当i为:"+i+" ");
document.write("长度为:"+content.childNodes.length+"<br>");
continue;
}else{
content.removeChild(content.childNodes[i]);
document.write("当i为:"+i+" ");
document.write("长度为:"+content.childNodes.length+"<br>");
}
通过这样输出,你就可以看出长度是递减的,i是递增的,存在空白节点,删除一个元素节点,空白节点就会顶上位置。这里最后会留下空白节点(本身这里的if判断就把空白节点留下了)
可以判断数组长度,重置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;
}
实现了结果,不知道科学不科学
<!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>
你直接试试log就能看出来,如果没有前面的if条件,实际上是根本遍历不了所有节点的。如果我猜的没错的话,之所以能遍历,并不是因为i一直是0,而是有空节点,那个length会隔一次减1,不会一直减1.并且如果我这个题目要求的删除所有的子节点,包括空白节点,那这个答案就是错的。
i不会变,i始终是0 只有content.childNodes.length长度会变