2012-07-20 74 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

相關問題