1

私はこのようなものを持っています:
//html

<div class="panel">
    <div class="tools">
        <a href="#action1">Action 1</a>
        <a href="#action1">Action 1</a>
        <a href="#action1">Action 1</a>
    </div>
    <div class="list">
        <table>...</table>
    </div>
</div>

//JavaScript (jQuery)

var lookup = $('.panel'),
    buttons = lookup.find('.tools').detach().find('a');
...
//append buttons somewhere

だから、ここで私は'.tools'切り離してから'.panel'、ボタンを取って別の場所に追加しました。しかし、'.tools'ノードはどうですか?ガベージコレクションされていますか?detached を保存し'.tools'、そこからボタンを取得してから破棄する必要がありますか?

その問題-html部分がAJAXリクエストを介して受信され、このすべてのコードがsuccessハンドラー内にある場合。

4

1 に答える 1

2

この場合、buttons 変数は切り離された要素の子への参照を作成し、少なくともボタンが範囲外になるまで、要素がガベージ コレクションされるのを防ぎます。

編集:

何かをガベージ コレクションするには、DOM からデタッチする必要があり、その要素 (またはデタッチされたノード ツリー内の要素) を参照する JavaScript 変数がないようにする必要があります。

例えば:

<div id="a">
  <div id="b">
    <div id="c">
        <div id="d"></div>
    </div>
  </div>
</div>

"#b" をデタッチしてガベージ コレクションを実行する場合、要素 b、c、または d を指す変数を使用することはできません。

これはうまくいきません:

var c = $('#c')

$('#b').detach()

var c は #b の一部である要素 #c への参照を保持するため、ガベージ コレクションを行うことはできません。

detach はデタッチしている要素への参照を返すため、これも機能しません。

var b = $('#b').detach()
于 2010-09-27T15:23:59.763 に答える