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

removeChild 删除节点问题

我的作业中想打印出已删除内容,但用教程中的办法不行。具体代码如下:

<!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也就是改成原来的节点名称才可以打出,结果虽然正确,但那个是原节点,不是现在已删除的,不知这是怎么回事?谢谢。

正在回答

3 回答

因为源节点删除了,但是他只是不存在DOM树种了,但是还存在内存中,所以删除节点之后再把删除节点赋值为null

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

你的这句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 解释得挺详细的,我就不多说了。


希望对你用帮助。



1 回复 有任何疑惑可以回复我~
#1

天山之路 提问者

非常感谢!!
2016-03-24 回复 有任何疑惑可以回复我~
#2

钰与宸 回复 天山之路 提问者

不客气。
2016-03-24 回复 有任何疑惑可以回复我~

谢谢你的回答。但我不是想把内存中的数据删除,而是想把它打印出来,就是把已删除的项目打印出来,不知如何写。

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

举报

0/150
提交
取消

removeChild 删除节点问题

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