2012-07-20 19 views
2

我有一个按钮单击事件,用于抓取与选中的复选框相关联的名称,并将它们添加到页面右侧的复选框<ul>。这工作正常,然后我有另一个按钮,将删除和<li>的检查checkboxes<ul>。这适用于。当您添加已从右侧删除的项目时,会出现问题。该项目不在页面上,因此它明显从DOM中删除,但它好像仍然保存在浏览器内存中。我如何着手清理内存?代码如下。jQuery元素从DOM中删除,但似乎存储在内存中?

$('.add-people').click(function() { 
    $('.add-names:checked').each(function() { 
     var name = $(this).parent().siblings('td.name-cell').html(); 
     if ($('ul.group-list').find(':contains(' + name + ')').length) { 
     //Name is already in list 
     } else { 
     var newLi = '<li><input id="name" class="remove-names" type="checkbox" name="' + name + '"><span>' + name + '</span></li>' 
     $('ul.group-list').append(newLi);       
     } 
    }); 
}); 

$('.remove-people').click(function() { 
    $('.remove-names:checked').each(function() { 
     $(this).parent().remove(); 
    }); 
}); 

回答

5

从DOM中删除DOM元素后,只有存在对DOM元素具有引用的JavaScript代码时才会保持活动状态。如果没有对DOM元素本身的JavaScript引用,那么它将在下一次垃圾收集扫描期间由浏览器进行垃圾回收。

A reference in javascript表示包含DOM节点的JavaScript变量,数组,属性等。在上面的代码中,我没有看到任何持久的变量,所以我没有看到为什么DOM节点不会从这段特定的代码中被垃圾收集的任何原因。

为什么你认为它存储在浏览器内存中?

为了确保DOM元素是从内存中清除,你做两件事情:

  1. 从DOM删除它。
  2. 确保没有javascript变量通过将它们设置为null或任何其他值或确保它们超出范围以使变量本身被销毁(因此也释放它们的引用)而保存对其的引用。

就是这样,没有别的。

+0

谢谢,但这真的不帮我在这里的问题。 – stackDat 2012-07-20 01:51:12

+0

@stackDat - 那么你在这里有什么问题?我认为我回答了有关何时清理DOM元素的问题。你有什么实际问题(请具体说明)? – jfriend00 2012-07-20 01:51:31

+1

@stackDat它呢,你可以阅读这个http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection – undefined 2012-07-20 01:53:10

相关问题