removeChild 删除节点问题

来源:9-14 删除节点removeChild()

天山之路

2016-03-15 12:36

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

<!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回答

  • 潆澈
    2016-03-15 21:03:01
    已采纳

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

  • 钰与宸
    2016-03-23 18:06:44

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


    希望对你用帮助。



    钰与宸 回复天山之路

    不客气。

    2016-03-24 10:15:10

    共 2 条回复 >

  • 天山之路
    2016-03-15 22:32:35

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

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

467395 学习 · 21877 问题

查看课程

相似问题