2011-09-29 27 views
15

¿Hay alguna forma oficial de enganchar jQuery.remove() para poder invocar una función antes/después?jQuery remove() devolución de llamada?

Tengo un sistema por el cual ciertos controladores se unen a los elementos, y a veces estos elementos se eliminan (por ejemplo, un widget UI cuyo elemento principal se elimina mediante alguna otra acción en la página). Si se puede notificar a los controladores que se eliminó su elemento principal, puedo ejecutar las rutinas de limpieza un poco más fácilmente.

+0

que acabamos de ver en el código en cuestión, https://github.com/jquery/jquery/blob/master/src/manipulation.js#L168, y es realmente sólo un envoltorio delgado alrededor parent.removeChild . Entonces ve con la respuesta de @Drew. – Boldewyn

+0

¿Encontró algún trabajo alternativo, además de envolver el evento de eliminación original? – Mahn

Respuesta

5

Use un evento personalizado, adjunte controladores al evento personalizado que se activa antes/después de la eliminación. Por ejemplo,

$(document).bind('remove', function(event, dom){ 

    $(document).trigger('beforeRemove', [ dom ]); 
    $(dom).remove(); 
    $(document).trigger('afterRemove', [ dom ]); 
}); 

$(document).trigger('remove', 'p'); //Remove all p's 
17

puede utilizar jQuery.when():

$.when($('div').remove()).then(console.log('div removed')); 
+0

Disculpe, quizás esa no sea una buena respuesta en el caso actual, pero fue útil para mí. –

+0

Esto hace el trabajo. – tponthieux

+3

Esto hace el trabajo si está buscando una manera de eliminar el elemento * inmediatamente * y tener un fuego de devolución de llamada una vez que se realiza la eliminación. Pero eliminar el evento en jQuery es un evento sincrónico, por lo que la respuesta aquí es redundante: puedes lograr exactamente lo mismo haciendo: '$ ('div'). Remove(); console.log ('div removed'); ' – Mahn

2

Aquí es un truco ingenioso - es posible que quieras darle una oportunidad.

$('div').hide(1, function(){ 
    // callback 
    $(this).remove(); 
}); 
Cuestiones relacionadas