MutationObserver: Konstruktor MutationObserver()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Der DOM MutationObserver()
Konstruktor – Teil der MutationObserver
Schnittstelle – erstellt und
gibt einen neuen Beobachter zurück, der einen angegebenen Callback aufruft, wenn DOM-Ereignisse
auftreten.
Die DOM-Überwachung beginnt nicht sofort; die
Methode observe()
muss zuerst aufgerufen werden, um festzulegen,
welcher Teil des DOMs überwacht werden soll und welche Arten von Änderungen beobachtet werden sollen.
Syntax
new MutationObserver(callback)
Parameter
callback
-
Eine Funktion, die bei jeder DOM-Änderung aufgerufen wird, die gemäß dem beobachteten Knoten oder Teilbaum und den Optionen qualifiziert ist.
Die
callback
-Funktion nimmt zwei Parameter als Eingabe:- Ein Array von
MutationRecord
Objekten, die jede aufgetretene Änderung beschreiben. - Den
MutationObserver
, der dencallback
aufgerufen hat. Dies wird am häufigsten verwendet, um den Beobachter mitMutationObserver.disconnect()
zu trennen.
Weitere Details finden Sie in den Beispielen unten.
- Ein Array von
Rückgabewert
Ein neues MutationObserver
Objekt, das konfiguriert ist, den angegebenen
callback
aufzurufen, wenn DOM-Änderungen auftreten.
Beispiele
Beobachtung von Kindelementen
Dieses Beispiel enthält Schaltflächen, um ein <li>
Element zu einer Liste hinzuzufügen und das erste <li>
Element aus der Liste zu entfernen.
Wir verwenden einen MutationObserver
, um über Änderungen an der Liste benachrichtigt zu werden. Im Callback protokollieren wir Hinzufügungen und Entfernungen, und sobald die Liste leer ist, trennen wir den Beobachter.
Die Schaltfläche "Beispiel zurücksetzen" setzt das Beispiel in seinen ursprünglichen Zustand zurück.
HTML
<button id="add">Add child</button>
<button id="remove">Remove child</button>
<button id="reset">Reset example</button>
<ul id="container"></ul>
<pre id="log"></pre>
CSS
#container,
#log {
height: 150px;
overflow: scroll;
}
#container li {
background-color: paleturquoise;
margin: 0.5rem;
}
JavaScript
const add = document.querySelector("#add");
const remove = document.querySelector("#remove");
const reset = document.querySelector("#reset");
const container = document.querySelector("#container");
const log = document.querySelector("#log");
let namePrefix = 0;
add.addEventListener("click", () => {
const newItem = document.createElement("li");
newItem.textContent = `item ${namePrefix}`;
container.appendChild(newItem);
namePrefix++;
});
remove.addEventListener("click", () => {
const itemToRemove = document.querySelector("li");
if (itemToRemove) {
itemToRemove.parentNode.removeChild(itemToRemove);
}
});
reset.addEventListener("click", () => {
document.location.reload();
});
function logChanges(records, observer) {
for (const record of records) {
for (const addedNode of record.addedNodes) {
log.textContent = `Added: ${addedNode.textContent}\n${log.textContent}`;
}
for (const removedNode of record.removedNodes) {
log.textContent = `Removed: ${removedNode.textContent}\n${log.textContent}`;
}
if (record.target.childNodes.length === 0) {
log.textContent = `Disconnected\n${log.textContent}`;
observer.disconnect();
}
console.log(record.target.childNodes.length);
}
}
const observerOptions = {
childList: true,
subtree: true,
};
const observer = new MutationObserver(logChanges);
observer.observe(container, observerOptions);
Ergebnis
Versuchen Sie, auf "Add child" zu klicken, um Listenelemente hinzuzufügen und auf "Remove child", um sie zu entfernen. Der Beobachter-Callback protokolliert Hinzufügungen und Entfernungen. Sobald die Liste leer ist, protokolliert der Beobachter eine "Disconnected"-Nachricht und trennt den Beobachter.
Die Schaltfläche "Beispiel zurücksetzen" lädt das Beispiel neu, damit Sie es erneut ausprobieren können.
Spezifikationen
Specification |
---|
DOM # ref-for-dom-mutationobserver-mutationobserver① |