qq_慕丝0295148
2019-10-22 18:17
<!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++){
var x = content.removeChild(content.childNodes[i])
x = null
return x
}
}
</script>
<button onclick="clearText()">清除节点内容</button>
</body>
</html>
<script type="text/javascript">
// 清除空白节点
function cleanWhitespace(element)
{
for(i=0; i<element.childNodes.length; i++)
{
var node = element.childNodes[i];
if(node.nodeType == 3 && !/\S/.test(node.nodeValue))
{
node.parentNode.removeChild(node);
}
}
}
cleanWhitespace(document.getElementById("content"));
function clearText() {
var content=document.getElementById("content");
// 在此完成该函数
var xchild=content.childNodes;
for(i=0;i<xchild.length;i++){
var xclose=content.removeChild(xchild[i]);
xclose=null;
return xclose;
}
}
</script>
<button onclick="clearText()">清除节点内容</button>
你这是经典的错误写法。
第一,每删除一个节点,content.childNodes.length的值会变化(减少),导致循环提前终止。
点击一次按钮,就只会删除一半的节点,因为i在增加的同时,content.childNodes.length却在减少。
第二,第一次点按钮不是没反应,而是因为存在空白节点,第一次执行删除了所有的空白节点。第二次点按钮,删除了一半的非空节点。
修改:
var len =content.childNodes.length;
for (var i =0;i<len;i++){
content.removeChild(content.childNodes[0])
}
保证循环执行11次(6个空白节点,5个非空节点),每次删除第一个节点后,原来的第二个节点就变成了第一个节点。
JavaScript进阶篇
468195 学习 · 21891 问题
相似问题