2010-12-05 7 views
8

Si se elimina un elemento de la página, ¿se desvincula automáticamente? ¿O es este un escenario en el que uno debería desvincularse usando la desvinculación de jquery?Desvinculación en jQuery

Asumo se hace de forma automática ...

+0

@martym cuando elimina un elemento del dom y vuelve a cargar una página, no se volverá a enlazar ya que no puede encontrar ese elemento. sucede en la carga de la próxima página. – kobe

+0

¿Por qué debería hacer otra carga de página sin una actualización? Estoy un poco confundido por tu respuesta ... – Matrym

Respuesta

6

Si quita elementos usando remove o empty, controladores de eventos se eliminarán automáticamente con el fin de evitar pérdidas de memoria. De lo contrario, permanecerán, a menos que estén explícitamente desvinculados antes de eliminar esos elementos.

EDITAR: Resulta que .html eliminará los controladores de eventos también, llamando a un método interno .cleanData (declarado en la línea 5177). Esto se puede comprobar en el source:

html: function(value) { 
    ... 

    for (var i = 0, l = this.length; i < l; i++) { 
        // Remove element nodes and prevent memory leaks 
        if (this[i].nodeType === 1) { 
         jQuery.cleanData(this[i].getElementsByTagName("*")); 
         this[i].innerHTML = value; 
        } 
       } 
    ... 

tanto, para evitar pérdidas de memoria, no utilice directamente innerHTML para reemplazar elementos DOM, que se han adherido los controladores de eventos de jQuery.

+0

Así que si reemplazo el contenido de un div usando .html ("cosas"), ¿debo entender que los elementos que estaban dentro de él permanecen ligados? ¿Puedo desvincularme más tarde o tengo que desvincularme antes de eliminarlos del dom? – Matrym

+0

@ karim79 solo con fines de aprendizaje puede dar un ejemplo de una pérdida de memoria relacionada con elementos vinculantes ... al hacer clic o al mouse – kobe

+0

@martym .html aplicar html a algunos elementos dom existentes por lo que no hay necesidad de enlazar agian, si los elementos que se van necesitan tener algunos enlaces, entonces tienes que usar jquery.live y hacerlo. – kobe