2

チェックされているチェックボックスに関連付けられた名前を取得し<ul>、ページの右側にあるチェックボックス付きに追加するボタンクリックイベントがあります。これは正常に動作し、 から削除し<li>て をチェックする別のボタンがあります。これは動作します。問題は、右側から削除されたアイテムを追加し直すときに発生します。アイテムはページ上にないため、明らかに DOM から削除されていますが、ブラウザのメモリにまだ保存されているようです。メモリからクリアするにはどうすればよいですか?コードは以下です。checkboxes<ul>

$('.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();
    });
});
4

1 に答える 1

5

DOM 要素が DOM から削除されると、DOM 要素への参照を持つ JavaScript コードが存在する場合にのみ、DOM 要素が保持されます。DOM 要素自体への JavaScript 参照がない場合、次のガベージ コレクション スイープ中にブラウザによってガベージ コレクションが行われます。

Areference in javascriptは、DOM ノードを保持する JavaScript 変数、配列、プロパティなどを意味します。上記のコードでは、永続的な変数が表示されないため、この特定のコードから DOM ノードがガベージ コレクションされない理由がわかりません。

なぜブラウザのメモリに保存されていると思いますか?

DOM 要素がメモリから確実に消去されるようにするには、次の 2 つのことを行います。

  1. DOM から削除します。
  2. javascript 変数を null またはその他の値に設定するか、変数自体が破棄されるように範囲外にすることで、javascript 変数が参照を保持していないことを確認します (したがって、変数の参照も解放します)。

それだけです、他には何もありません。

于 2012-07-20T01:47:35.030 に答える