これらの要素はコードで参照されていますが、ページのメイン DOM ツリーから切り離されています。
簡単な例:
var a = document.createElement("div");
a
現在、切断された要素を参照していますa
。まだスコープ内にある場合は、GC できません。
デタッチされた dom ツリーがメモリに保持されている場合は、それらへの参照を保持しています。jQuery を使用すると、これを行うのはいくらか簡単です。トラバースされた結果への参照を保存し、それを維持するだけです。例えば:
var parents = $("span").parent("div");
$("span").remove();
とにかくスパンを参照しているように見えなくても、スパンが参照されるようになりました。jQueryプロパティparents
を介して間接的にすべてのスパンへの参照を保持します。.prevObject
そうparents.prevObject
することで、すべてのスパンを参照するオブジェクトが得られます。
http://jsfiddle.net/C5xCR/6/の例を参照してください。スパンが直接参照されるようには見えませんが、実際にはparents
グローバル変数によって参照されており、Detached DOM ツリーの 1000 スパンが消えることはありません。
これは同じjsfiddleですが、次のとおりです。
delete parents.prevObject
また、スパンが切り離された dom ツリーやどこにも存在しないことがわかります。http://jsfiddle.net/C5xCR/7/