当前位置:  开发笔记 > 编程语言 > 正文

删除div中的所有子DOM元素

如何解决《删除div中的所有子DOM元素》经验,为你挑选了5个好方法。

我有以下dojo代码在div下创建表面图形元素:

....

....

....

drawRec()将第一次绘制矩形图形.如果我在锚点href中再次调用此函数,如下所示:

 ...

它会再次绘制另一个图形.我需要清理div下的所有图形,然后再次创建.如何添加一些dojo代码呢?



1> Maurice Perr..:
while (node.hasChildNodes()) {
    node.removeChild(node.lastChild);
}


只是迂腐 - 删除没有相应JS对象的DOM节点会导致内存泄漏.
@Tom:dojox.gfx创建JavaScript对象以与底层图形系统进行通信,这些图形系统可能具有DOM节点(SVG,VML)或不具有DOM节点(Silverlight,Flash,Canvas).从DOM中删除DOM节点不会删除这些JavaScript对象,并且**也不会删除**DOM节点,因为JavaScript对象仍然具有对这些DOM节点的引用.我在这个问题的答案中描述了处理这种情况的正确方法.
@robocat它与IE无关:JS对象引用DOM对象将它们保存在内存中,底层JS对象通过其他JS对象的引用保存在内存中.例如:gfx表面引用其所有子项,组也引用其所有子项,依此类推.仅删除DOM节点是不够的.
@ david-chu-ca - 可能是Eugene(dojo GFX库的主要作者)的后期答案应该被标记为已接受的答案.尤金 - 谢谢你的澄清.
@Eugene:你能谈谈更多吗?

2> Chetan Sastr..:
node.innerHTML = "";

非标准,但速度快,支持良好.


与删除节点相比,*更慢*:http://jsperf.com/innerhtml-vs-removechild/15
似乎是HTML 5中的标准.上面的博客条目是用户错误.https://developer.mozilla.org/en-US/docs/DOM/element.innerHTML
IE不支持.检查:http://www.theogray.com/blog/2009/06/internet-explorer-unknown-runtime-error

3> Eugene Lazut..:

首先,你需要创建一个表面并将其保存在方便的地方.例:

var surface = dojox.gfx.createSurface(domNode, widthInPx, heightInPx);

domNode通常是一个简单的

,用作表面的占位符.

您可以一次性清除曲面上的所有内容(所有现有的形状对象都将失效,之后不要使用它们):

surface.clear();

所有与表面相关的函数和方法都可以在dojox.gfx.Surface的官方文档中找到.使用的例子可以在dojox/gfx/tests/.



4> James..:
while(node.firstChild) {
    node.removeChild(node.firstChild);
}



5> Brian C..:

在Dojo 1.7或更高版本中,使用domConstruct.empty(String|DomNode):

require(["dojo/dom-construct"], function(domConstruct){
  // Empty node's children byId:
  domConstruct.empty("someId");
});

在较旧的Dojo中,使用dojo.empty(String|DomNode)(在Dojo 1.8中弃用):

dojo.empty( id or DOM node );

这些empty方法中的每一个都安全地删除节点的所有子节点.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有