2011-02-09 6 views
9

W javascript, prawdopodobnie przy użyciu jQuery, jak mogę wykryć, czy zawartość html danego elementu uległa zmianie?jQuery: Jak wykryć, czy html zmienił się w danym elemencie?

Chciałbym móc zrobić somthing jak:

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

jestem zasadniczo próbuje wykryć, czy podane elementy są dodawane do div lub jeśli wewnętrznej html podanych elementów (takich jak etykiety) zmienił się, a następnie ukrył lub pokazał div w zależności od treści.

Każdy alternatywny pomysł na to, jak osiągnąć smt, jest również ceniony jako.

Mam nadzieję, że nie będę musiał powracać do jakiejś niejasnej wtyczki, aby to zrobić!

UWAGA: to musi działać co najmniej w IE8!

+0

+1 za świetną opaskę na oku –

Odpowiedz

20

Można użyć zdarzenia DOM Level 3 DOMNodeInserted. Przykład:

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

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

Zdarzenie zostanie uruchomiony, gdy nowy węzeł został dołączony do elementu, w którym jest powiązanie obsługi.

+0

A co ze zdarzeniem "DOMSubtreeModified'? (Obsługiwane tylko w przeglądarkach Chrome, Firefox i Safari) – Jan

+0

@Jan: Jeśli poprawnie zrozumiem wymaganie OP (wykrywanie nowych węzłów), to zdarzenie będzie dobrze. – jAndy

+0

i czy to zdarzenie zostanie wywołane, jeśli nazwa klasy jednego z dzieci zostanie zmieniona? To także "zmiana treści". Nie mówię, że twoje rozwiązanie jest złe, tylko sugeruje inne wydarzenie, które może pomóc, jeśli potrzebuje czegoś więcej niż wykrywanie wstawiania nowych dzieci. – Jan