Ich möchte eine Funktion ausführen, wenn dem HTML-Code div oder input hinzugefügt werden. Ist das möglich?
Zum Beispiel wird eine Texteingabe hinzugefügt, dann sollte die Funktion aufgerufen werden.
Ich möchte eine Funktion ausführen, wenn dem HTML-Code div oder input hinzugefügt werden. Ist das möglich?
Zum Beispiel wird eine Texteingabe hinzugefügt, dann sollte die Funktion aufgerufen werden.
Antworten:
Update 2015, neu
MutationObserver
wird von modernen Browsern unterstützt:Chrome 18+, Firefox 14+, IE 11+, Safari 6+
Wenn Sie ältere unterstützen müssen, können Sie versuchen, auf andere Ansätze zurückzugreifen, wie die in dieser 5 (!) Jahre alten Antwort unten genannten. Es gibt Drachen. Genießen :)
Jemand anderes ändert das Dokument? Denn wenn Sie die volle Kontrolle über die Änderungen haben, müssen Sie nur Ihre eigene
domChanged
API erstellen - mit einer Funktion oder einem benutzerdefinierten Ereignis - und sie überall dort auslösen / aufrufen, wo Sie Dinge ändern.Das DOM Level-2 verfügt über Mutation-Ereignistypen , ältere Versionen des IE unterstützen dies jedoch nicht. Beachten Sie, dass die Mutationsereignisse in der DOM3-Ereignisspezifikation veraltet sind und eine Leistungsbeeinträchtigung aufweisen .
Sie können versuchen, ein Mutationsereignis mit
onpropertychange
im IE zu emulieren (und auf den Brute-Force-Ansatz zurückgreifen, wenn keiner von ihnen verfügbar ist).Für einen vollständigen domChange kann ein Intervall ein Over-Kill sein. Stellen Sie sich vor, Sie müssen den aktuellen Status des gesamten Dokuments speichern und prüfen, ob jede Eigenschaft jedes Elements gleich ist.
Wenn Sie nur an den Elementen und ihrer Reihenfolge interessiert sind (wie Sie in Ihrer Frage erwähnt haben),
getElementsByTagName("*")
kann a möglicherweise funktionieren. Dies wird automatisch ausgelöst, wenn Sie ein Element hinzufügen, ein Element entfernen, Elemente ersetzen oder die Struktur des Dokuments ändern.Ich habe einen Proof of Concept geschrieben:
Verwendung:
Dies funktioniert unter IE 5.5+, FF 2+, Chrome, Safari 3+ und Opera 9.6+
quelle
Dies ist der bisher ultimative Ansatz mit kleinstem Code:
IE9 +, FF, Webkit:
quelle
mutations, observer
Parameter zur besseren Kontrolle an die Rückruffunktion.Ich habe kürzlich ein Plugin geschrieben, das genau das tut - jquery.initialize
Sie verwenden es genauso wie die
.each
FunktionDer Unterschied zu
.each
ist - in diesem Fall ist Ihr Selektor erforderlich.some-element
und in Zukunft mit diesem Selektor auf neue Elemente gewartet wird. Wenn ein solches Element hinzugefügt wird, wird es auch initialisiert.In unserem Fall ändern Sie die Initialisierungsfunktion einfach die Elementfarbe in Blau. Wenn wir also ein neues Element hinzufügen (egal ob mit Ajax oder sogar F12 Inspector oder so), wie:
Das Plugin wird es sofort starten. Außerdem stellt das Plugin sicher, dass ein Element nur einmal initialisiert wird. Wenn Sie also ein Element hinzufügen, dann
.detach()
aus dem Textkörper und dann erneut hinzufügen, wird es nicht erneut initialisiert.Das Plugin basiert auf
MutationObserver
- es funktioniert unter IE9 und 10 mit Abhängigkeiten, wie auf der Readme-Seite beschrieben .quelle
oder Sie können einfach Ihr eigenes Ereignis erstellen , das überall ausgeführt wird
Vollständiges Beispiel http://jsfiddle.net/hbmaam/Mq7NX/
quelle
Dies ist ein Beispiel für die Verwendung von MutationObserver von Mozilla, angepasst an diesen Blog-Beitrag
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
quelle
Verwenden Sie die MutationObserver- Oberfläche, wie im Blog von Gabriele Romanato gezeigt
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
quelle
Wie wäre es damit, eine Abfrage dafür zu erweitern?
Jquery 1.9+ hat Unterstützung dafür aufgebaut (ich habe gehört, nicht getestet).
quelle