1. Grundlegende VerwendungEs kann über den MutationObserver-Konstruktor instanziiert werden und der Parameter ist eine Rückruffunktion. let observer = neuer MutationObserver(() => console.log("ändern")); Konsole.log(Beobachter); Die Prototypenkette des Beobachterobjekts sieht wie folgt aus: MutationObserver-Instanz: Sie können sehen, dass es die Methoden 1. Beobachtermethode Überwachung Die Syntax lautet wie folgt: // Erhalte zwei Parameter: Observer (DOM-Element, MutationObserverInit-Objekt);
Beispiel 1: Änderungen in der Body-Elementklasse überwachen: let observer = neuer MutationObserver(() => console.log("ändern")); //Überwachen Sie die Attributänderungen des Body-Elements observer.observe(document.body, { Attribute: wahr }); // Durch Ändern der Klasse des Body-Elements wird die Rückruffunktion asynchron ausgeführt, die beim Erstellen des MutationObserver-Objekts übergeben wurde. document.body.className = "main"; console.log("Body-Attribute geändert"); // Konsolenausgabe: // Die Body-Attribute wurden geändert // ändern Die Ausgabe der obigen 2. Fügen Sie der Callback-Funktion den Array-Parameter der MutationRecord-Instanz hinzuNun ist die Rückruffunktion sehr simpel, sie gibt lediglich einen String aus und es ist unklar, welche Änderungen stattgefunden haben. Tatsächlich erhält die Rückruffunktion ein Array von let observer = neuer MutationObserver( // Die Rückruffunktion ist ein Array von MutationRecord-Instanzen. Das Format ist wie folgt: // [Mutationsdatensatz, Mutationsdatensatz, Mutationsdatensatz, ...] (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); Dokument.Body.Klassenname = "Haupt"; console.log("Body-Attribute geändert"); // Konsolenausgabe: // Die Body-Attribute wurden verändert // (1) [MutationRecord] Die MutationRecords-Informationen lauten wie folgt: MutationRecord-Beispiel : Einige der wichtigeren Informationen:
Wenn Sie die Attribute des Textkörpers mehrmals ändern, entstehen mehrere Datensätze: // Mutationsaufzeichnung let Beobachter = neuer MutationObserver( // Die Rückruffunktion empfängt eine MutationRecord-Instanz, die ein Array ist. (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); // Dreimal ändern document.body.className = "main"; Dokument.Body.Klassenname = "Container"; Dokument.Body.Klassenname = "Box"; // Die Konsole druckt Folgendes: // (3) [Mutationsdatensatz, Mutationsdatensatz, Mutationsdatensatz] Beachten:
3. Die Disconnect-Methode beendet den RückrufWenn Sie den Rückruf beenden möchten, können Sie die Methode „Disconnect“ verwenden. let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); // Erste Änderung document.body.className = "main"; //Beenden Sie observer.disconnect(); // Zweite Änderung document.body.className = "container"; // Keine Log-Ausgabe Eine Log-Ausgabe, auch der ersten Änderung, erfolgt hier nicht, da die Callback-Funktion asynchron und zuletzt ausgeführt wird. Mit „setTimeout“ können Sie die endgültige Beendigung steuern, sodass der Rückruf normal ausgeführt wird. let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); // Erste Änderung document.body.className = "main"; // Beenden setTimeout(() => { Beobachter.trennen(); // Die dritte Änderung, die folgende Änderung wird nicht zurückgerufen document.body.className = "container"; }, 0); // Zweite Änderung document.body.className = "container"; // Seitenausgabe: // (2) [Mutationsdatensatz, Mutationsdatensatz] Reaktivierung nach Kündigung Nach dem Beenden können Sie es neu starten, siehe folgendes Beispiel: let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); // Die erste Änderung wird in das Array „mutationRecords“ eingetragen. document.body.className = „main“; // Beenden setTimeout(() => { Beobachter.trennen(); // Zweite Änderung, da diese beendet wird, werden die folgenden Änderungen nicht in das mutationRecords-Array eingetragen document.body.className = "container"; }, 0); setzeTimeout(() => { // Beobachter erneut aktivieren.observe(document.body, { Attribute: wahr }); // Ändern Sie die Body-Attribute und geben Sie das mutationRecords-Array ein. document.body.className = "container"; }, 0); // Konsolenausgabe: // [Mutationsdatensatz] // [Mutationsdatensatz] Die Rückruffunktion wird hier zweimal ausgeführt und druckt zwei Werte:
Bei der zweiten Änderung werden die geänderten 4. Die Methode takeRecords ruft geänderte Datensätze ab Wenn Sie die vorhandenen let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); // Die erste Änderung wird in das mutationRecords-Array eingetragen document.body.className = "main"; // Die zweite Änderung wird in das mutationRecords-Array eingetragen document.body.className = "container"; // Die dritte Änderung wird in das mutationRecords-Array eingetragen document.body.className = "box"; // Änderungsdatensatz abrufen und verarbeiten let mutationRecords = observer.takeRecords(); console.log(Mutationsdatensätze); // Konsolendruck: // (3) [Mutationsdatensatz, Mutationsdatensatz, Mutationsdatensatz] Konsole.log(Beobachter.takeRecords()); // Konsolendruck: // [] //Beenden Sie observer.disconnect(); 2. Auf mehrere Elemente hören Die obige Überwachung hat nur ein Element. Wenn Sie mehrere Elemente überwachen möchten, können Sie let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); // Div1-Element erstellen und abhören let div1 = document.createElement("div"); Beobachter.beobachten(div1, { Attribute: wahr }); div1.id = "Box1"; // div2 erstellen und abhören let div2 = document.createElement("div"); Beobachter.beobachten(div2, { Attribute: wahr }); div2.id = "Box2"; // Konsolendruck: // (2) [Mutationsdatensatz, Mutationsdatensatz] Die Konsole druckt zwei MutationRecords, darunter:
Andere Verwendungen ähneln den oben genannten. 3. Überwachungsbereich MutationObserverInit-ObjektBei der obigen Überwachung geht es um die Überwachung von Attributen. Natürlich können Sie auch andere Dinge überwachen, beispielsweise: Text, untergeordnete Knoten usw. 1. Eigenschaften beobachtenDie obigen Beispiele berücksichtigen alle die Attribute des Elements selbst. Hier ist ein weiteres Beispiel für benutzerdefinierte Attribute. let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: wahr }); // Benutzerdefinierte Attribute ändern document.body.setAttribute("data-id", 1); // Konsolendruck: // [Mutationsdatensatz] Das Ändern benutzerdefinierter Attribute wird auch zum Erwähnenswert ist auch, dass attributeFilter-Filterung: Wenn Sie Änderungen in angegebenen Attributen überwachen möchten, können Sie zum Filtern let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); Beobachter.beobachten(Dokument.Text, { Attribute: true, // Whitelist-Attributfilter festlegen: ["data-id"] }); //Ändern Sie die Attribute in der Whitelist attributeFilter und geben Sie mutationRecords ein document.body.setAttribute("Daten-ID", 1); // Ändern Sie die Attribute, die nicht in der Whitelist attributeFilter sind und nicht in mutationRecords eingetragen werden document.body.setAttribute("Klasse", "Haupt"); // Konsolendruck: // [Mutationsdatensatz] attributeOldValue zeichnet den alten Wert auf : Wenn Sie den alten Wert aufzeichnen möchten, können Sie let Beobachter = neuer MutationObserver( // oldValue im MutationRecord-Objekt stellt den alten Wert dar (mutationRecords) => console.log(mutationRecords.map((x) => x.oldValue)) ); Beobachter.beobachten(Dokument.Text, { Attribute: true, attributeOldValue: true, }); // Erste Änderung, da ursprünglich kein Wert vorhanden ist, alter Wert oldValue = null document.body.setAttribute("Klasse", "Haupt"); // Zweite Änderung, da bereits einmal geändert, der alte Wert oldValue = main document.body.setAttribute("Klasse", "Container"); // Konsolendruck: // (2) [null, 'main'] 2. Beachten Sie den Text Um den Text zu beobachten, setzen Sie Betrachten Sie das folgende Beispiel: <!-- Ein sexy div --> <div id="box">Hallo</div> <Skripttyp="text/javascript"> let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); // Textknoten abrufen let textNode = document.getElementById("box").childNodes[0]; Beobachter.beobachten(textNode, { //Textänderungen beobachten characterData: true }); // Den Text ändern textNode.textContent = "Hi"; // Konsolendruck: // [Mutationsdatensatz] </Skript> Wenn Sie direkt auf das Div-Element hören, funktioniert es nicht: <!-- Ein sexy div --> <div id="box">Hallo</div> <Skripttyp="text/javascript"> let observer = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); // Das Abhören von div hat keine Wirkung let box = document.getElementById("box"); Beobachter.beobachten(box, { Zeichendaten: true }); box.textContent = "Hallo"; //Keine Ausgabe in der Konsole</script> characterDataOldValue zeichnet den alten Wert auf: Wenn Sie den alten Wert des Textes aufzeichnen möchten, können Sie <!-- Ein sexy div --> <div id="box">Hallo</div> <Skripttyp="text/javascript"> let Beobachter = neuer MutationObserver( (Mutationsaufzeichnungen) => Konsole.Protokoll(Mutationsaufzeichnungen.Map((x) => x.alterWert)) ); // Textknoten abrufen let textNode = document.getElementById("box").childNodes[0]; Beobachter.beobachten(textNode, { //Textänderungen beobachten characterData: true, // Alte Daten behalten characterDataOldValue: true, }); // Den Text zweimal ändern textNode.textContent = "Hi"; textNode.textContent = "Nett"; // Konsolendruck: // (2) ['Hallo', 'Hi'] </Skript> Da der ursprüngliche Inhalt im Div „Hallo“ war, wurde er zuerst in „Hi“ und dann in „Nice“ geändert. Daher lauten die alten Werte nach den beiden Änderungen: „Hallo“ und „Hi“. 3. Untergeordnete Knoten beobachten <!-- Ein sexy div --> <div id="box">Hallo</div> <Skripttyp="text/javascript"> let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); // Holen Sie sich das div let box = document.getElementById("box"); Beobachter.beobachten(box, { //Änderungen in untergeordneten Knoten beobachten childList: true, }); //Element hinzufügen let span = document.createElement("span") span.textContent = "Welt"; box.anhängenUntergeordnetesElement(span); // Konsolendruck: // [Mutationsdatensatz] </Skript> Das Attribut So entfernen Sie einen Knoten: <!-- Ein sexy div --> <div id="box">Hallo</div> <Skripttyp="text/javascript"> let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); // Holen Sie sich das div let box = document.getElementById("box"); Beobachter.beobachten(box, { //Änderungen in untergeordneten Knoten beobachten childList: true, }); // Entfernen Sie den ersten untergeordneten Knoten, bei dem es sich um den Textknoten „Hallo“ handelt. box.removeChild(box.childNodes[0]); // Konsolendruck: // [Mutationsdatensatz] </Skript> Mobiler Knoten: Wenn ein bestehender Knoten verschoben wird, werden zwei <!-- Ein sexy div --> <div id="box">Hallo<span>Welt</span></div> <Skripttyp="text/javascript"> let observer = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); // Holen Sie sich das div let box = document.getElementById("box"); Beobachter.beobachten(box, { //Änderungen in untergeordneten Knoten beobachten childList: true, }); // Verschiebe den Span-Knoten vor den Hello-Knoten box.insertBefore(box.childNodes[1], box.childNodes[0]); // Das Verschieben eines Knotens bedeutet eigentlich, ihn zuerst zu löschen und dann hinzuzufügen. // Konsolendruck: // (2) [Mutationsdatensatz, Mutationsdatensatz] </Skript> 4. Beobachten Sie den Teilbaum Die oben beobachteten Knoten sind alle aktuell festgelegten Zielknoten. Für Wenn Sie Änderungen am <!-- Ein sexy div --> <div id="box">Hallo<span>Welt</span></div> <Skripttyp="text/javascript"> let Beobachter = neuer MutationObserver( (Mutationsdatensätze) => console.log(Mutationsdatensätze) ); let box = document.getElementById("box"); Beobachter.beobachten(box, { Attribute: true, //Beobachten Sie die Änderungen des Teilbaums subtree: true }); // Änderungen im ID-Attribut des Span-Elements können beobachtet werden box.childNodes[1].id = "text"; // Konsolendruck: // [Mutationsdatensatz] </Skript> Nachdem Zusammenfassen:
Dies ist das Ende dieses Artikels über die Details der Überwachung von DOM-Elementen Das könnte Sie auch interessieren:
|
<<: Lösen Sie das Matching-Problem in CSS
>>: Methode zum Knacken der Registrierung der FlashFXP-FTP-Clientsoftware
Während der heutigen Vorlesung habe ich über den ...
Umweltvorbereitung: VMware+CentOS, jdk 1. Überprü...
Dies ist der Effekt der Element-UI-Ladekomponente...
In unserer täglichen Arbeit kommen wir oft mit Da...
Inhaltsverzeichnis 1. Drei Binlog-Modi 1.Anweisun...
Die Hintergrundfarbe der Tabelle kann über das At...
HTML besteht aus zwei Teilen: Kopf und Text ** Da...
1. Übersicht In diesem Artikel wird das DOCTYPE-E...
Inhaltsverzeichnis 1. Listenschnittstelle und and...
Inhaltsverzeichnis 1. JDK installieren Manuelle I...
CPU-Last und CPU-Auslastung Beides kann bis zu ei...
Download-Adresse: https://dev.mysql.com/downloads...
MySQL-Datenbanken werden häufig verwendet, insbes...
So zentrieren Sie den gesamten Seiteninhalt und pa...
Inhaltsverzeichnis einführen Link Start Gehen Sie...