$('#foo')可能存在jQuery内存问题.remove()?

时间:2009-06-27 13:47:48

标签: javascript jquery dom

我刚刚发现当使用remove()函数时,匹配的元素不会从jQuery对象中删除,只会删除DOM。

根据remove() documentation

  

从中删除所有匹配的元素   DOM。这不会删除它们   jQuery对象,允许你使用   匹配的元素进一步。

当然,如果一个网络应用程序继续添加和删除dom中的元素,这将继续消耗越来越多的内存?有人可以确认是否是这种情况?可以做些什么来避免这种情况?

3 个答案:

答案 0 :(得分:7)

我认为一旦它超出范围,它将被垃圾收集(最终)。如果您在使用过多内存时遇到问题,可以尝试在返回的对象上使用delete运算符。

答案 1 :(得分:2)

我试图通过一些测试找到我自己问题的答案。

<script type="text/javascript">
$(document).ready(function() { 
    for ($i=1; $i<10000; $i++) {
        $('table').append("<tr id=\"test_" + $i + "\"><td>test " + $i + "</td></tr>");
        $('#test_'+($i-1)).remove();
    }
});
</script>
<table>
    <tr><td id="test_0">test 0</td></tr>
</table>

我使用:

对remove()做了各种变体
var test = $('#test_'+($i-1)).remove();

delete operator(感谢tvanfosson的建议):

var test = $('#test_'+($i-1)).remove();
delete test

完成这些测试后,我仍然会使用remove()。由于浏览器的内存使用量在重新加载页面后总是增加,因此很难判断是否存在内存泄漏。也许其他人能够通过不同的方式测试代码来提供更具决定性的答案。

答案 2 :(得分:1)