D'où des objets .detach-ed vont?
-
25-09-2019 - |
Question
J'ai quelque chose comme ceci:
// 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
Alors, ici, je suis détaché de '.tools'
'.panel'
puis je pris les boutons et les ajouter quelque part ailleurs. Mais qu'en est-noeud '.tools'
? Est-il beeing ordures collectées ou non? Est-ce que je dois sauver '.tools'
détaché, prendre les boutons de lui et de le détruire?
Si la question -. Html partie est reçu par requête AJAX et tout ce code est à l'intérieur gestionnaire de success
La solution
Dans ce cas, la variable boutons crée une référence à un enfant de l'élément détaché, et empêchera l'élément de se ramasse-miettes, au moins jusqu'à ce que les boutons est hors de portée.
EDIT:
Pour que quelque chose à ordures collectées, il doit être détaché du DOM, et il doit y avoir aucune variable JavaScript faisant référence à l'élément (ou des éléments dans l'arborescence de noeuds individuelle)
Par exemple:
<div id="a">
<div id="b">
<div id="c">
<div id="d"></div>
</div>
</div>
</div>
Si vous voulez détacher « # B » et l'ont ramasse-miettes, vous ne pouvez pas avoir des variables pointant vers des éléments b, c ou d.
Cela ne fonctionne pas:
var c = $('#c')
$('#b').detach()
var c garderait une référence à #c élément qui fait partie de #B, soyez donc ne peut pas être garbage collection.
Cela ne fonctionne pas non plus, parce que Détacher renvoie une référence à l'élément que vous détachez.
var b = $('#b').detach()