我刚刚发现当使用remove()函数时,匹配的元素不会从jQuery对象中删除,只会删除DOM。
从中删除所有匹配的元素 DOM。这不会删除它们 jQuery对象,允许你使用 匹配的元素进一步。
当然,如果一个网络应用程序继续添加和删除dom中的元素,这将继续消耗越来越多的内存?有人可以确认是否是这种情况?可以做些什么来避免这种情况?
答案 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)