DOM-Mutation-event in JQuery oder Javascript Vanille
Gibt es irgendwelche DOM-mutation-events in JQuery oder in vanilla Javascript, Feuer, cross-browser?
Zu klären, sagen, ich habe ein Skript auf meiner Seite, die fügt ein div in den Körper. Ich habe keinen Zugriff auf das Skript und ich weiß nicht, Wann das div eingefügt wurde. Ich Frage mich, wenn es ein DOM-mutation-event, dass ich einen listener hinzufügen, für, um zu wissen, wenn ein element eingefügt wurde. Ich weiß, ich kann ein timer verwendet, um in regelmäßigen Abständen überprüfen, für das einfügen aber ich weiß nicht wirklich, wie der Aufwand, die dieser verlangen würde.
InformationsquelleAutor der Frage aziz punjani | 2011-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist sicherlich ein hack, aber warum nicht patch das zugrunde liegende DOM-Methoden zum einfügen von Knoten? Es gibt ein paar Möglichkeiten, dies zu tun:
Eine. Sie wissen, was bestimmten element wird angefügt:
fiddle-demo für Ein
B. Sie wissen, was Typ element wird angefügt:
fiddle-demo für B
(Beachten Sie, dass die Lösung B nicht unterstützt
IE < 8
oder einen anderen browser, der keine Unterstützung für DOM-Prototypen.)Diese Technik könnte genauso gut verwendet werden, auf alle zugrunde liegenden DOM-mutation-Funktionen wie
insertBefore
replaceChild
oderremoveChild
.Das ist die Allgemeine Idee, diese demos angepasst werden könnte für so ziemlich jeden anderen Anwendungsfall -- sagen Sie, Sie wollen, um ein weites Netz Auswerfen und fangen alle Ergänzungen unabhängig von der Art UND stellen Sie sicher, es funktioniert auf
alle Browseralles, aberIE < 8
? (siehe Beispiel C unten)UPDATE
C. Rekursiv zu Fuß den DOM, die swap-Funktion auf jedes element zum auslösen einer Rückruf, und dann wenden Sie den gleichen patch auf alle Kinder, die angehängt wird.
fiddle-demo für C
UPDATE 2
Als Tim Nach Unten kommentiert, die oben genannte Lösung auch nicht in
IE < 8
weilappendChild
ist nicht einFunction
und nicht unterstützencall
oderapply
. Ich nehme an, Sie könnten immer wieder fallen zu klobig, aber treuensetInterval
Methode, wenntypeof document.body.appendChild !== 'function'
.InformationsquelleAutor der Antwort Daniel Mendel
Gibt es einige veraltet DOM-mutation-events, wie
DOMNodeInserted
undDOMNodeInsertedIntoDocument
dass immer noch Arbeit für mich in Chrome 14 und IE9.Sehen Sie ein Beispiel, bei http://jsfiddle.net/Kai/WTJq6/
Sehen Sie alle auf der W3C-Entwurf zu http://www.w3.org/TR/DOM-Level-3-Events/
InformationsquelleAutor der Antwort Kai
JCADE (JQuery Erstellen und Zerstören Ereignisse) wird dies tun. Es verwendet Verhalten für den IE und DOM-mutation-events für andere Browser. Es verwendet nicht die timing-Ereignisse und nicht wickeln JQuery-Methoden wie livequery.
https://github.com/snesin/jcade
InformationsquelleAutor der Antwort user1028943
Nicht ohne ein plugin, ich glaube, aber ich wäre nicht überrascht, wenn ich mich Irre.
Meine Forschung gefunden hat, eine ein paar zur Auswahl.
Hier ist einer: http://plugins.jquery.com/project/mutation-events
Hier ist eine andere: https://www.adaptavist.com/display/jQuery/Mutation+Veranstaltungen
InformationsquelleAutor der Antwort Adam Terlson
Wenn Sie auf der Suche nach einer alternative zu dieser Methode, hier ist http://www.jqui.net/jquery-projects/jquery-mutate-official/ kann auch ermöglichen es Ihnen, hinzufügen von Ereignissen sich selbst und halten Sie eine Uhr für fast jede änderung, Klassennamen ändern, Höhe ändern, die Breite ändern.
InformationsquelleAutor der Antwort Val
Den livequery - plugin verwendet werden kann. In der version 1.x ein timer wurde verwendet, um periodisch auf änderungen überprüfen. Allerdings, die neuere version 2.x-Zweig scheint zu funktionieren, ohne periodische timeout (ungetestet).
InformationsquelleAutor der Antwort Simon Steinberger