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

Était-ce utile?

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top