2010-09-19 9 views

Odpowiedz

6

Jeśli musisz wykryć zmiany, możesz sprawdzić zdarzenia mutacji DOM. DOM events wikipedia page wymienia je wszystkie. Powinieneś jednak wiedzieć, że nie są one obsługiwane w Internet Explorerze i mogą uruchamiać się zbyt często w przeglądarkach, które je obsługują. Metoda brutalnej siły polega na użyciu setTimeout i samodzielnym sprawdzaniu zmian.

Moje doświadczenie pokazuje jednak, że można uniknąć potrzeby powiadomienia o zmianie DOM. Czy mógłbyś podać więcej szczegółów na temat swoich dokładnych wymagań?

+0

Chcę umożliwić użytkownikowi zmianę koloru dowolnego elementu na stronie, klikając element. Gdy znany jest punkt kliknięcia, chcę zeskanować DOM dla wszystkich elementów znajdujących się w punkcie kliknięcia i pozwolić użytkownikowi zdecydować, który element chce zmienić kolor. Ponieważ elementy można dodawać i usuwać na tej stronie, wygląda na to, że muszę skanować DOM przy każdym kliknięciu. Myślałem, że cache wszystkie elementy DOM w zmiennej i zmienić tę zmienną, gdy zmienia się DOM. –

+0

@MishaMoroshko AFAIK można użyć event.target, aby wiedzieć, który węzeł został kliknięty. Możesz więc dołączyć wydarzenie do samego dokumentu "documentElement". –

4

Możesz dołączyć do wielu zdarzeń DOM w zależności od rodzaju zmiany, której chcesz słuchać. Oto strona ze wszystkimi wydarzeniami zmian DOM:

https://developer.mozilla.org/en/DOM_Events

Ogólny, catch-all wydarzenie zmiana DOM jest DOMSubtreeModified. Na przykład:

document.getElementById('abc').addEventListener('DOMSubtreeModified', f, false); 
2

Nie ma wbudowanego wydarzenia, które jest niestety powszechnie obsługiwane. Możesz jednak użyć wtyczki jQuery o nazwie livequery.

+0

Są świetne, ale nie są odpowiednio obsługiwane. Wolałbym zaoszczędzić sobie trudu i użyć przetestowanej wtyczki. –

+0

Korzystanie z bibliotek hamuje zapotrzebowanie na tworzenie standardów, a także ogranicza przepływ użytkowników do Internet Explorer. –

+4

@Delan Są to bardzo błędne założenia - biblioteki JavaScript usuwają różnice w implementacji DOM przeglądarki i pomagają stworzyć linię bazową, z którą można się rozwijać, zamiast spędzać czas na rozwiązywaniu problemów związanych z kompatybilnością przeglądarek. Łamanie witryny w IE nie powstrzyma ludzi odejścia od IE, tylko osób odwiedzających Twoją witrynę i nikomu nie pomoże. –

Powiązane problemy