Ich habe ein div , die ihren Inhalt die ganze Zeit zu ändern hat, sei es ajax requests
, jquery functions
, blur
etc etc.
Gibt es eine Möglichkeit, Änderungen an meinem Div zu jedem Zeitpunkt zu erkennen?
Ich möchte keine Intervalle oder Standardwerte verwenden, die überprüft wurden.
So etwas würde reichen
$('mydiv').contentchanged() {
alert('changed')
}
keypress
Ereignis an ein inhaltsbearbeitbares<div>
Element. Ich bin mir nicht sicher, ob die dortigen Lösungen dafür gelten. Sie würden definitiv keine programmatischen Änderungen am Inhalt eines Elements aufgreifen.Antworten:
Wenn Sie keinen Timer verwenden und innerHTML überprüfen möchten, können Sie dieses Ereignis versuchen
Weitere Details und Daten zur Browserunterstützung finden Sie hier .
Achtung: In neueren jQuery-Versionen ist bind () veraltet, daher sollten Sie stattdessen on () verwenden:
quelle
$("body").on('DOMSubtreeModified', "mydiv", function() { });
Verwenden von Javascript MutationObserver
quelle
Da
$("#selector").bind()
veraltet ist , sollten Sie verwenden:quelle
#
anzeigt, dass das Symbol vor dem Selektor stehen muss.Sie können dies versuchen
Dies funktioniert jedoch möglicherweise nicht im Internet Explorer. Ich habe es nicht getestet
quelle
clearTimeout(window.something); window.something = setTimeout(...);
Sie suchen nach MutationObserver oder Mutation Events . Weder werden sie überall unterstützt noch von der Entwicklerwelt zu gern gesehen.
Wenn Sie wissen (und sicherstellen können, dass sich die Größe des Divs ändert), können Sie möglicherweise das Crossbrowser-Größenänderungsereignis verwenden .
quelle
Der folgende Code funktioniert bei mir.
Hoffe es wird jemandem helfen :)
quelle
Es gibt keine eingebaute Lösung für dieses Problem. Dies ist ein Problem mit Ihrem Design und Codierungsmuster.
Sie können das Publisher / Subscriber-Muster verwenden. Hierfür können Sie benutzerdefinierte jQuery-Ereignisse oder Ihren eigenen Ereignismechanismus verwenden.
Zuerst,
Jetzt können Sie divhtmlchanging / divhtmlchanged-Ereignisse wie folgt abonnieren:
Jetzt müssen Sie Ihre Änderungen am Div-Inhalt über diese
changeHtml()
Funktion ändern . Sie können also die erforderlichen Änderungen entsprechend überwachen oder vornehmen, da das Argument für die Rückrufdatenbindung die Informationen enthält.Sie müssen das HTML Ihres Divs so ändern;
Sie können dies auch für alle HTML-Elemente außer Eingabeelementen verwenden. Auf jeden Fall können Sie dies ändern, um es mit jedem Element zu verwenden.
quelle
Verwenden Sie MutationObserver, wie in diesem von Mozilla bereitgestellten und aus diesem Blog-Beitrag adaptierten Snippet zu sehen
Alternativ können Sie das in diesem Link gezeigte JQuery-Beispiel verwenden
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
quelle
Sie können das alte innerHTML des div in einer Variablen speichern. Legen Sie ein Intervall fest, um zu überprüfen, ob der alte Inhalt mit dem aktuellen Inhalt übereinstimmt. Wenn dies nicht stimmt, tu etwas.
quelle
Probieren Sie den MutationObserver aus:
Browserunterstützung: http://caniuse.com/#feat=mutationobserver
quelle
Das Hinzufügen von Inhalten zu einem div, sei es über jQuery oder direkt über die de DOM-API, ist standardmäßig die
.appendChild()
Funktion. Sie können die.appendChild()
Funktion des aktuellen Objekts überschreiben und einen Beobachter darin implementieren. Nachdem.appendChild()
wir unsere Funktion überschrieben haben , müssen wir diese Funktion von einem anderen Objekt ausleihen, um den Inhalt anhängen zu können. Deshalb rufen wir das.appendChild()
eines anderen Divs an, um den Inhalt endgültig anzuhängen. Dies gilt natürlich auch für die.removeChild()
.Hier finden Sie ein naives Beispiel. Sie können es selbst erweitern, denke ich. http://jsfiddle.net/RKLmA/31/
Übrigens: Dies zeigt, dass JavaScript dem OpenClosed-Prinzip entspricht. :) :)
quelle