为了账号安全,请及时绑定邮箱和手机立即绑定

为什么只能删除前三个


<!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");

  for(var i=0;i<content.childNodes.length;i++){ 
  content.removeChild(content.childNodes[0]);
  
  }
 
}
</script>

<button onclick="clearText()">清除节点内容</button>



</body>
</html>


正在回答

2 回答

function clearText() {
var content=document.getElementById("content");
for(i=0;i<content.childNodes.length;i++)
{
var x=content.removeChild(content.childNodes[i]);
}
}


我使用的浏览器会把空白字符算作子节点,用1-6来表示,
<div id="content">1
<h1>html</h1>2
<h1>php</h1>3
<h1>javascript</h1>4
<h1>jquery</h1>5
<h1>java</h1>6
</div>
因此第一次点击按钮,
删除第child[0]后,1被删除
<h1>html</h1>变为child[0],
2变为child[1],第二次把child[1]删除,也就是2
for循环以此类推,会先把1-6空白字符删除,之后便停止,因为child.length会随着删除动态改变,以至于不能一次删除
同理,第二次点击按钮会把html、javascript、java三个先删除,最后点击一次删除一个。

解决方法:把child.length赋值给l,l并不会动态改变,并总是删除第一个child[0]或最后一个child[child.length-1],一次性把全部子节点删除

0 回复 有任何疑惑可以回复我~

循环删除的时候  content.childNodes.length 在一直减小,i 在一直++ 。所以当i=3的时候,content.childNodes.length=2,导致循环条件不成立

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么只能删除前三个

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信