我有这样的事情:
// HTML
<div class="panel">
<div class="tools">
<a href="#action1">Action 1</a>
<a href="#action1">Action 1</a>
<a href="#action1">Action 1</a>
</div>
<div class="list">
<table>...</table>
</div>
</div>
// JavaScript(jQuery)
var lookup = $('.panel'),
buttons = lookup.find('.tools').detach().find('a');
...
//append buttons somewhere
所以,在这里我'.tools'
与'.panel'
分离,然后我拿了按钮并将它们附加到其他地方。但是'.tools'
节点呢?它是垃圾收集还是没收?我是否必须保存分离的'.tools'
,从中取出按钮而不是销毁它?
如果它的问题 - 通过AJAX请求接收html部分,并且所有这些代码都在success
处理程序内。
答案 0 :(得分:2)
在这种情况下,buttons变量创建对分离元素的子元素的引用,并且将阻止元素被垃圾收集,至少在按钮超出范围之前。
修改强>
为了收集垃圾,需要将其与DOM分离,并且必须没有引用该元素的JavaScript变量(或分离节点树中的任何元素)
例如:
<div id="a">
<div id="b">
<div id="c">
<div id="d"></div>
</div>
</div>
</div>
如果要分离“#b”并将其收集垃圾,则不能有任何指向元素b,c或d的变量。
这不起作用:
var c = $('#c')
$('#b').detach()
var c会保留对#c元素#c的引用,因此不能进行垃圾回收。
这也不起作用,因为detach返回对要分离的元素的引用。
var b = $('#b').detach()