Mam div, który ma jej zawartość zmienia się cały czas, czy to ajax requests
, jquery functions
, blur
etc etc.
Czy jest jakiś sposób na wykrycie jakichkolwiek zmian na moim divie w dowolnym momencie?
Nie chcę używać żadnych interwałów ani sprawdzonych wartości domyślnych.
Zrobiłoby to coś takiego
$('mydiv').contentchanged() {
alert('changed')
}
keypress
zdarzenia z<div>
elementem zadowalającym treść . Nie jestem pewien, czy rozwiązania w tym zakresie mają zastosowanie. Na pewno nie zauważyliby żadnych zmian programowych w treści elementu.Odpowiedzi:
Jeśli nie chcesz używać timera i sprawdzać innerHTML, możesz spróbować tego wydarzenia
Więcej informacji i dane dotyczące wsparcia przeglądarki znajdują się tutaj .
Uwaga: w nowszych wersjach jQuery funkcja bind () jest przestarzała, dlatego zamiast niej należy użyć funkcji on ():
źródło
$("body").on('DOMSubtreeModified', "mydiv", function() { });
Korzystanie z Javascript MutationObserver
źródło
Ponieważ
$("#selector").bind()
jest przestarzałe , należy użyć:źródło
#
wskazujący, że symbol musi iść przed selektorem.Możesz tego spróbować
ale to może nie działać w Internet Explorerze, nie przetestowałem tego
źródło
clearTimeout(window.something); window.something = setTimeout(...);
Szukasz MutationObserver lub Mutation Events . Ani nie są obsługiwane wszędzie, ani nie są zbyt czule postrzegane przez świat programistów.
Jeśli wiesz (i możesz się upewnić, że) rozmiar div zmieni się, być może będziesz mógł użyć zdarzenia zmiany rozmiaru crossbrowser .
źródło
Poniższy kod działa dla mnie.
Mam nadzieję, że to komuś pomoże :)
źródło
Nie ma wbudowanego rozwiązania tego problemu, jest to problem z twoim projektem i wzorcem kodowania.
Możesz użyć wzorca wydawcy / subskrybenta. W tym celu możesz użyć niestandardowych zdarzeń jQuery lub własnego mechanizmu zdarzeń.
Pierwszy,
Teraz możesz subskrybować wydarzenia divhtmlzmienianie / divhtmlzmieniane wydarzenia w następujący sposób,
Teraz musisz zmienić swoje zmiany treści div za pomocą tej
changeHtml()
funkcji. Można więc odpowiednio monitorować lub wprowadzać niezbędne zmiany, ponieważ argument danych powiązania zwrotnego zawierający informacje.Musisz zmienić HTML swojego diva w ten sposób;
Możesz także użyć tego dla dowolnego elementu (elementów) HTML oprócz elementu wejściowego. W każdym razie możesz to zmodyfikować, aby używać z dowolnym elementem (elementami).
źródło
Użyj MutationObserver jak widać w tym fragmencie dostarczonym przez Mozillę i zaadaptowanym z tego postu na blogu
Alternatywnie możesz użyć przykładu JQuery widocznego w tym łączu
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
źródło
Możesz przechowywać stary innerHTML div w zmiennej. Ustaw interwał, aby sprawdzić, czy stara treść pasuje do bieżącej. Kiedy to nie jest prawda, zrób coś.
źródło
Wypróbuj MutationObserver:
obsługa przeglądarki: http://caniuse.com/#feat=mutationobserver
źródło
Dodanie części treści do div, czy to przez jQuery, czy bezpośrednio przez DOM-API, domyślnie jest
.appendChild()
funkcją. Możesz zastąpić.appendChild()
funkcję bieżącego obiektu i zaimplementować w nim obserwatora. Teraz, po zastąpieniu naszej.appendChild()
funkcji, musimy pożyczyć tę funkcję od innego obiektu, aby móc dołączyć treść. Dlatego dzwonimy do.appendChild()
innego div, aby w końcu dołączyć treść. Oczywiście dotyczy to również.removeChild()
.Tutaj możesz znaleźć naiwny przykład. Myślę, że możesz go przedłużyć samodzielnie. http://jsfiddle.net/RKLmA/31/
Nawiasem mówiąc: pokazuje to, że JavaScript jest zgodny z założeniem OpenClosed. :)
źródło