Erkennen von änderungen in den DOM
Möchte ich eine Funktion ausführen, wenn ein paar div-oder-Eingang Hinzugefügt, um die html.
Ist das möglich?
Beispielsweise eine text-Eingabe Hinzugefügt wird, dann wird die Funktion aufgerufen werden soll.
Es sei denn, einige third-party-Skript ist das hinzufügen der Knoten in den DOM, ist das nicht notwendig.
Duplikat von stackoverflow.com/questions/2457043/...
Mögliche Duplikate von gibt es eine JavaScript - /jQuery-DOM-änderung Hörer?
wenn Sie eine chrome-Erweiterung, die injiziert JS-code, ist es nützlich.
github.com/Maykonn/page-info-js
Duplikat von stackoverflow.com/questions/2457043/...
Mögliche Duplikate von gibt es eine JavaScript - /jQuery-DOM-änderung Hörer?
wenn Sie eine chrome-Erweiterung, die injiziert JS-code, ist es nützlich.
github.com/Maykonn/page-info-js
InformationsquelleAutor esafwan | 2010-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
2015 update, neue
MutationObserver
ist mit modernen Browsern möglich:Chrome 18+, Firefox 14+, IE 11+, Safari 6+
Wenn Sie Bedarf an Unterstützung von älteren, Sie dürfen versuchen, fallen zurück auf andere Ansätze, wie die erwähnten in diesem 5 (!) jährigen Antwort unten. Es werden Drachen. Genießen Sie 🙂
Jemand anderes ändern des Dokuments? Weil, wenn Sie haben die volle Kontrolle über die änderungen, die Sie gerade brauchen, um erstellen Sie Ihr eigenes
domChanged
API - Funktion oder benutzerdefinierte Ereignis - und trigger/rufen Sie es überall Sie ändern Dinge.Den DOM-Level-2-hat Mutation-event-Typen, aber ältere version von IE nicht unterstützt wird. Beachten Sie, dass die mutation events sind veraltet in der DOM3 Events Spezifikation und haben eine Einbußen bei der Leistung.
Können Sie versuchen, zu emulieren mutation Veranstaltung mit
onpropertychange
im IE (und fallen zurück auf die brute-force-Ansatz, wenn nicht von Ihnen ist).Für eine voll domChange ein Intervall könnte eine over-kill. Vorstellen, dass Sie brauchen, um zu speichern Sie den aktuellen Zustand des gesamten Dokuments, und prüfen jedes element ist in jeder Eigenschaft derselben.
Vielleicht, wenn Sie nur daran interessiert sind, in die Elemente und Ihre Ordnung (wie Sie in Ihrer Frage erwähnt), ein
getElementsByTagName("*")
arbeiten können. Dieser wird automatisch ausgelöst, wenn Sie ein element entfernen, ein element, Elemente ersetzen oder ändern die Struktur des Dokuments.Schrieb ich eine proof-of-concept:
Verwendung:
Diese funktioniert unter IE 5.5+, FF 2+, Chrome, Safari 3+ und Opera 9.6+
siehe mein update...
nachdenklicher Kommentar von dir wie immer 🙂 Habe Sie gelernt, zu verwenden, die
this
keyword btw?Fragen: wie funktioniert die jQuery live() lösen Sie dieses problem, wenn Sie nicht erkennen kann-DOM-änderung?
Ich kann nicht glauben, dass im Jahr 2010 Sie hatte IE5.5 um dies zu testen.
InformationsquelleAutor
Habe ich kürzlich ein plugin geschrieben, was genau das macht - jquery.initialisieren
Sie es verwenden die gleiche Weise wie
.each
FunktionDen Unterschied von
.each
ist - es braucht dein Selektor, in diesem Fall.some-element
und warten, bis neue Elemente mit diesem Selektor in der Zukunft, wenn ein solches element Hinzugefügt wird, wird es initialisiert zu werden.In unserem Fall die Funktion initialisieren nur ändern element Farbe blau. Also, wenn wir add new element (egal, ob mit ajax-oder auch F12 Inspektor oder nichts) wie:
Plugin wird init Sie sofort. Auch plugin sorgt dafür, dass ein element nur einmal initialisiert. Also, wenn Sie element hinzufügen, dann
.detach()
es aus dem Körper und dann wieder hinzufügen, wird es nicht initialisiert werden wieder.Plugin basiert auf
MutationObserver
- es funktioniert unter IE9 und 10 mit Abhängigkeiten, die so detailliert auf die readme-Seite.InformationsquelleAutor pie6k
oder Sie können einfach Erstellen Sie Ihre eigene event, dass überall laufen
Vollständige Beispiel
http://jsfiddle.net/hbmaam/Mq7NX/
InformationsquelleAutor HB MAAM
Dies ist ein Beispiel für die Verwendung MutationObserver von Mozilla angepasst von dieser blog-post
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
InformationsquelleAutor Anthony Awuley
Verwenden Sie die MutationObserver Schnittstelle, wie gezeigt, in der Gabriele Romanato ist blog
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
InformationsquelleAutor Anthony Awuley
Wie etwa die Verlängerung eines jquery?
Jquery 1.9+ hat eine eingebaute Unterstützung für diese(ich habe gehört nicht getestet).
InformationsquelleAutor StartCoding