2011-02-09 28 views
9

En javascript, posiblemente usando jQuery, ¿cómo puedo detectar si el contenido html de un elemento dado ha cambiado?jQuery: ¿Cómo puedo detectar si el html ha cambiado dentro de un elemento dado?

me gustaría ser capaz de hacer algo como:

$('#myDiv').change(function(){ 
    // do some stuff 
}); 

básicamente estoy tratando de detectar si determinados elementos se agregan a la div o si el código HTML interno de elementos dados (como etiquetas) ha cambiado y luego oculta o muestra el div dependiendo del contenido.

Cualquier idea alternativa acerca de cómo lograr smt como esta también se agradece.

¡Espero no tener que volver a un plugin oscuro para hacer esto!

NOTA: ¡esto debe funcionar al menos en IE8!

+0

+1 por un increíble parche en el ojo –

Respuesta

20

Puede usar el evento DOM Level 3 DOMNodeInserted. Ejemplo:

$('#myDiv').bind('DOMNodeInserted', function(e) { 
    console.log('element: ', e.target, ' was inserted); 
}); 

Demostración: http://www.jsfiddle.net/vsgdZ/1/

El evento se dispara cada vez que un nuevo nodo se añade al elemento en el que se enlaza el controlador.

+0

O ¿qué ocurre con el evento 'DOMSubtreeModified'? (Solo compatible con Chrome, Firefox y Safari) – Jan

+0

@ Jan: Si entiendo correctamente los requisitos de OP (detección de nuevos nodos), este evento funcionará perfectamente. – jAndy

+0

y se desencadenaría este evento si se cambia el nombre de clase de uno de los niños? Eso también es 'cambio de contenido'. No estoy diciendo que su solución sea incorrecta, simplemente sugiero otro evento que podría ayudar si necesita algo más que detectar la inserción de nuevos niños. – Jan

Cuestiones relacionadas