8

jQueryのremove関数が本当にDOMから要素を削除するのかどうか本当に疑問に思っています。まず、ここ
を見ましたが、答えは説得力がありません。 remove関数を呼び出した要素をまだ操作できることに気付いたときに、この問題が発生しました。

私のコード:

<div id="container">
    <div id="div">
        This is a div
    </div>
</div>

var div = $('#div');
$('#div').remove();
$('#container').append(div);

注:私の質問は、これをどのように解決するかではありませんか?しかし、私はここで何が起こっているのかを理解したいです!

実際、このコードはdomから#divを削除しませんが、 #divに設定されたデータがある場合、それは失われます。私は今、remove関数の振る舞いについてかなり混乱しています。誰かがこれを説明できますか? デモ

div変数は、dom要素の単なるクローンではなく、それへの参照であると確信しています。これは、div変数を操作すると(のようにdiv.html('something')) 、DOM内のdivが更新されるためです。
それとも私は間違っていますか?

4

2 に答える 2

14

remove()実際にDOMから要素を削除します。

divただし、この例では、要素を変数に割り当てたため、要素はメモリにキャッシュされています。したがって、引き続き使用して再度追加することができ、元のイベントがすべて含まれます。

あなたの言うことが正しければ、なぜ私はdivにバインドされたデータを失うのですか?

ソースでremove()を確認するcleanDataと、イベントを削除しdataて要素のキャッシュをクリアする内部関数が呼び出されていることがわかります。これがあなたが情報を失う理由です。

DOMから要素を削除したいが、要素は保持したい場合は、detach()代わりにを使用してください。

違いを示すためのフィドルは次のとおりです。http://jsfiddle.net/2VbmX/

于 2012-05-23T09:00:24.850 に答える
2

割り当てられた変数を削除する必要がありました:

delete div;
于 2012-05-23T12:32:54.173 に答える