2011-02-09 11 views
9

In javascript, probabilmente usando jQuery, come posso rilevare se il contenuto html di un dato elemento è cambiato?jQuery: Come posso rilevare se l'html è cambiato all'interno di un dato elemento?

mi piacerebbe essere in grado di fare somthing come:

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

sto fondamentalmente cercando di rilevare se determinati elementi vengono aggiunti al div o se il codice HTML interno di determinati elementi (come le etichette) è cambiato e quindi nasconde o mostra il div a seconda del contenuto.

Qualsiasi idea alternativa su come ottenere smt come questo è anche apprezzata.

Spero di non dover tornare a qualche plugin oscuro per farlo!

NOTA: questo deve funzionare almeno in IE8!

+0

+1 per una splendida benda sull'occhio –

risposta

20

È possibile utilizzare l'evento DOM Level 3 DOMNodeInserted. Esempio:

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

Demo: http://www.jsfiddle.net/vsgdZ/1/

L'evento verrà generato ogni volta che un nuovo nodo è stato aggiunto l'elemento su cui si associa il gestore.

+0

O per quanto riguarda l'evento 'DOMSubtreeModified'? (Supportato solo da Chrome, Firefox e Safari) – Jan

+0

@Jan: Se capisco i requisiti degli OP correttamente (rilevando nuovi nodi) questo evento andrà benissimo. – jAndy

+0

e questo evento si attiva se viene modificato il nome classe di uno dei bambini? Questo è anche "cambio di contenuto". Non sto dicendo che la tua soluzione sia sbagliata, suggerendo semplicemente un altro evento che potrebbe aiutarti se ha bisogno di qualcosa di più che rilevare l'inserimento di nuovi bambini. – Jan

Problemi correlati