如何清空某结点下的所有内容?

Even713 2010-03-27 04:42:11
比如
<div id="div1">
<div onclick="alert('1')">1</div>
<div onclick="alert('2')">2</div>
<div onclick="alert('3')">3</div>
<div><input type="button" value="click me"></div>
...
</div>

div1中有很多儿子,还有孙子,然后子节点上还会有事件。

我现在要清空div1,是否就是用$("div1").innerHTML="";这样会不会引起内存泄露,或者有什么垃圾回收的问题?
如何清空div1比较妥当?
...全文
230 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
he_8134 2010-03-31
  • 打赏
  • 举报
回复
.innerHTML="";

留存泄漏跟这个没什么关系...关键是其它部分代码没有胡写...
oxcow 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 even713 的回复:]

帖子加分了。
引用 8 楼 oxcow 的回复:

DOM中删除父节点则相应的子节点也一并被移除。

相应的引用也能一并删除,释放内存吗
[/Quote]
不能,的手工进行清除
ECMAScript 拥有无用存储单元收集程序(garbage collection routine),意味着不必专门销毁对象来释放内存。当再没有对对象的引用时,称该对象被废除(dereference)了。运行无用存储单元收集程序时,所有废除的对象都被销毁。每当函数执行完它的代码,无用存储单元收集程序都会运行,释放所有的局部变量,还有在一些其他不可预知的情况下,无用存储单元收集程序也会运行。
注意:废除对象的所有引用时要当心。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为 null。

可以参考下http://www.w3school.com.cn/js/pro_js_object_working_with.asp
myjidian 2010-03-30
  • 打赏
  • 举报
回复
kan kan....
lianqin7 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 even713 的回复:]
相应的引用也能一并删除,释放内存吗
[/Quote]

如果是在别的地方有引用,无论用什么方法删除,都还是可能存在内存泄露的危险,特别是在IE下
Even713 2010-03-30
  • 打赏
  • 举报
回复
帖子加分了。
[Quote=引用 8 楼 oxcow 的回复:]

DOM中删除父节点则相应的子节点也一并被移除。
[/Quote]
相应的引用也能一并删除,释放内存吗
happy664618843 2010-03-30
  • 打赏
  • 举报
回复
this.parentNode.parentNode.removeChild(this.parentNode.childNodes)
chollaflower 2010-03-30
  • 打赏
  • 举报
回复
可以用innerHTML = "";
zhousq00 2010-03-30
  • 打赏
  • 举报
回复
我是来学习的,我平时还都没有注意到这些问题,看来肤浅了~
hwoarangzk 2010-03-30
  • 打赏
  • 举报
回复
直接jQuery清空~
$("#div1").empty();
认真为自己 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lieri111 的回复:]

HTML code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equ……
[/Quote]


建议用隐藏 可能你有其他要求
oxcow 2010-03-28
  • 打赏
  • 举报
回复
DOM中删除父节点则相应的子节点也一并被移除。
oxcow 2010-03-28
  • 打赏
  • 举报
回复
把父节点直接移除了!
lianqin7 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sharp_ice 的回复:]
没考虑过这个问题

觉得因为不是CS,即使是AJAX用户停留在一个页面的时间都不会太久

一旦刷新页面,什么都没了
[/Quote]

如果存在内存泄露,一直刷新页面内存也会越来越大的,这个得考虑到
打字员 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouxiaobo123 的回复:]
JScript code
/**
* 遍历某一元素节点及其所有后代元素
*
* @param Elem node 所要清除的元素节点
* @param function func 进行处理的函数
*
*/
function walkTheDOM(node, func) {
func(node);
node = node.firstChild;……
[/Quote]

顶一下
zhouxiaobo123 2010-03-28
  • 打赏
  • 举报
回复
/**
* 遍历某一元素节点及其所有后代元素
*
* @param Elem node 所要清除的元素节点
* @param function func 进行处理的函数
*
*/
function walkTheDOM(node, func) {
func(node);
node = node.firstChild;
while (node) {
walkTheDOM(node, func);
node = node.nextSibling;
}
}
/**
* 清除dom节点的所有引用,防止内存泄露
*
* @param Elem node 所要清除的元素节点
*
*/
function purgeEventHandlers(node) {
walkTheDOM(node, function (e) {
for (var n in e) {
if (typeof e[n] ===
'function') {
e[n] = null;
}
}
});
蓝色_冰点 2010-03-28
  • 打赏
  • 举报
回复
没考虑过这个问题

觉得因为不是CS,即使是AJAX用户停留在一个页面的时间都不会太久

一旦刷新页面,什么都没了
passself 2010-03-28
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>js测试</title>
<script src="jquery-1.3.2.js"></script>
<script>
$(document).ready(function(){
$("#btn").toggle(function(){
$("#div1").hide();
$("#btn").attr("value","显示");
},function(){
$("#div1").show();
$("#btn").attr("value","隐藏");
});
});
</script>
</head>
<body>
<div id="div1">
<div onclick="alert('1')">1</div>
<div onclick="alert('2')">2</div>
<div onclick="alert('3')">3</div>
<div><input type="button" value="click me"></div>
</div>
<input type="button" value="隐藏" id="btn">
</body>
</html>


用一下jquery
daxian520 2010-03-28
  • 打赏
  • 举报
回复
2楼的函数在Firefox中将会发生异常,没有做节点类型的判断
lianqin7 2010-03-27
  • 打赏
  • 举报
回复
就算用递归向下removeChild,只要有对其儿子或孙子的引用存在,还是可能出现内存泄露的。。。。

换个思路,隐藏起来如何?以后还是可以复用的。。。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧