我刚刚发现,当使用remove()函数时,匹配的元素不会从jQuery对象中删除,而只是从DOM中删除。
根据删除()文件
从DOM中删除所有匹配的元素。这不会从jQuery对象中删除它们,从而允许您进一步使用匹配的元素。
当然,如果一个web应用程序不断地从dom中添加和删除元素,这将消耗越来越多的内存?有人能确认一下是否是这样吗?怎样才能避免这种情况呢?
发布于 2009-06-27 14:10:20
我认为一旦它超出范围,它就会被垃圾收集(最终)。如果您在过多使用内存方面遇到问题,可以尝试在返回的对象上使用delete操作符。
发布于 2009-06-28 11:38:25
我做了一个小小的测试,试图找到我自己的问题的答案。
<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();对于删除操作符 (感谢tvanfosson的建议):
var test = $('#test_'+($i-1)).remove();
delete test在做了这些测试之后,我仍然会使用remove()。很难判断是否存在内存泄漏,因为在重新加载页面后,浏览器的内存使用量总是会增加。也许其他人能够通过对代码进行不同的测试来提供更确切的答案。
发布于 2009-06-27 14:01:13
内存泄漏的问题似乎已经提交给jQuery team thread/thread/4a99f6e9b2e33057/45ce657a48afd43a。
https://stackoverflow.com/questions/1052857
复制相似问题