我的作业中想打印出已删除内容,但用教程中的办法不行。具体代码如下:
<!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 n = content.childNodes[i];
}
var d =content.removeChild(n);
document.write("删除的节点是:" + d.innerHTML);
}
</script>
<button onclick="clearText()">清除节点内容</button>
</body>
</html>
==================================
只有把document.write("删除的节点是:" + d.innerHTML);这句中的d 改成content也就是改成原来的节点名称才可以打出,结果虽然正确,但那个是原节点,不是现在已删除的,不知这是怎么回事?谢谢。
因为源节点删除了,但是他只是不存在DOM树种了,但是还存在内存中,所以删除节点之后再把删除节点赋值为null
你的这句for(var i=0;i<content.childNodes.length;i++){ var n = content.childNodes[i]; } 执行完了后只能获取到content最后一个子节点并放入n中,应该并不是你所希望的。应该把右括号“}”放到document.write("删除的节点是:" + d.innerHTML);这句的后面。这样你后面写的用d来接收删除的节点,再把d.innerHTML打出,就没有错,而不用改掉d,打出的就是已删除但是还存在内存d中的content的子节点了。
改完后原理上没错,但是因为浏览器兼容问题,会将空白处当作文本节点,所以你那样写实现不了一次都删除。至于如何再改进,建议你看下这个http://www.imooc.com/qadetail/56371 解释得挺详细的,我就不多说了。
希望对你用帮助。
谢谢你的回答。但我不是想把内存中的数据删除,而是想把它打印出来,就是把已删除的项目打印出来,不知如何写。