--- title: MutationObserver slug: Web/API/MutationObserver tags: - Beobachter-Muster - DOM-Knoten - Fortgeschrittene - Observer Pattern - Programmierung - Wertänderungen verfolgen - Änderungen überwachen translation_of: Web/API/MutationObserver ---
{{APIRef("DOM")}}
Der MutationObserver ermöglicht es, auf Änderungen im DOM-Element zu reagieren. Er löst die Mutation Events aus der DOM3 Events Spezifikation ab.
MutationObserver()Konstruktor zum Instanziieren neuer DOM-MutationObservers.
MutationObserver( function callback );
callbackMutationRecord-Objekten. Das zweite ist diese Instanz des MutationObserver.void observe( {{domxref("Node")}} target, MutationObserverInit options ); |
void disconnect(); |
Array takeRecords(); |
observe()Registriert die Instanz von MutationObserver , um Meldungen über Veränderungen DOM-Elements der angegebenen Node zu erhalten.
void observe(
{{domxref("Node")}} target,
MutationObserverInit options
);
targetoptionsMutationObserverInit-Objekt, das angibt, welche DOM-Veränderungen gemeldet werden sollen.disconnect()Sorgt dafür, dass die MutationObserver-Instanz die Überwachung der DOM-Benachrichtigungen beendet. Bis die observe() -Methode erneut benutzt wird, wird die Callback-Methode des Observers nicht aufgerufen.
void disconnect();
takeRecords()Leert die Nachrichten-Kette ("record queue") der MutationObserver Instanz gibt den vorher dort vorhandenen Inhalt zurück.
Array takeRecords();
Gibt ein Array mit MutationRecords zurück.
MutationObserverInitMutationObserverInit ist ein Objekt, das die folgenden Eigenschaften enthalten (und damit festlegen) kann:
childList, attributes, oder characterData auf true gesetzt werden. Anderenfalls wird ein Fehler "Ungültiger String angegeben" ("An invalid or illegal string was specified") ausgelöst.| Property | Description |
childList |
Wenn Kindelemente (child nodes) der Ziel-Node (inklusive Textnodes) beobachtet werden sollen, muss childList auf true gesetzt werden. |
attributes |
Muss auf true gesetzt werden, wenn Veränderungen an Attributen der Ziel-Node (target node) beobachtet bzw. berichtet werden sollen. |
characterData |
Muss |
subtree |
Auf true setzen, wenn nicht nur Änderungen an der Ziel-Node (target node) beobachtet werden sollen, sondern auch Veränderungen von dessen Kindelementen (child nodes). |
attributeOldValue |
Muss auf true gesetzt werden, wenn attributes ebenfalls true ist und der Wert des target-node-Attributs vor der Veränderung ebenfalls gemeldet werden soll. |
characterDataOldValue |
Muss auf |
attributeFilter |
Mit dieser Eigenschaft kann ein Array mit lokalen Attributnamen angegeben werden (ohne Namespace), wenn nicht alle Attribute beobachtet werden sollen. |
MutationRecordAls erstes Argument wird an die Callback-Funktion des Observers ein Array aus MutationRecord-Objekten übergeben. Ein MutationRecord-Objekt beinhaltet die folgenden Eigenschaften:
| Property | Type | Description |
type |
String |
Gibt attributes zurück, wenn die Veränderung eine Änderung an Attributen der Node gewesen ist, characterData wenn Veränderungen an der CharacterData-Node vorgenommen wurden, und childList wenn es sich um eine Veränderung an den untergeordneten Knoten im Baum handelt. |
target |
{{domxref("Node")}} |
Gibt die von der Veränderung betroffene Node zurück, abhängig von type. Bei attributes das Element, von dem Attribute geändert wurden. Bei characterData wird die CharacterData-Node zurückgegeben. Bei childList die Node, deren untergeordnete Kindelemente verändert wurden. |
addedNodes |
{{domxref("NodeList")}} |
Gibt die hinzugefügten Nodes zurück. Wenn keine hinzugefügt wurden, wird eine leere NodeList zurückgegeben. |
removedNodes |
{{domxref("NodeList")}} |
Gibt die entfernten Nodes zurück. Wenn keine entfernt wurden, wird eine leere NodeList zurückgegeben. |
previousSibling |
{{domxref("Node")}} |
Gibt den vorhergehenden Sibling der hinzugefügten oder entfernten Node(s) zurück, sonst null. |
nextSibling |
{{domxref("Node")}} |
Gibt den folgenden Sibling der hinzugefügten oder entfernten Node(s) zurück, sonst null. |
attributeName |
String |
Gibt den lokalen Namen des geänderten Attributs zurück, sonst null. |
attributeNamespace |
String |
Gibt den lokalen Namespace des geänderten Attributs zurück, sonst null. |
oldValue |
String |
Rückgabewert hängt vom type ab. Bei attributes wird der Wert des Attributs vor der Änderung zurückgegeben. Bei characterData, der Wert von Data vor der Änderung. Bei childList wird null zurückgegeben. |
Das folgende Beispiel wurde aus diesem Blog-Post übernommen.
// zu überwachende Zielnode (target) auswählen
var target = document.querySelector('#some-id');
// eine Instanz des Observers erzeugen
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});
// Konfiguration des Observers: alles melden - Änderungen an Daten, Kindelementen und Attributen
var config = { attributes: true, childList: true, characterData: true };
// eigentliche Observierung starten und Zielnode und Konfiguration übergeben
observer.observe(target, config);
// später: Observation wieder einstellen
observer.disconnect();
MutationObserver interface{{ CompatibilityTable() }}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 18 {{ property_prefix("WebKit") }} 26 |
{{ CompatGeckoDesktop(14) }} | 11 | 15 | 6.0 {{ property_prefix("WebKit") }} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | {{ CompatUnknown() }} | 18 {{ property_prefix("WebKit") }} 26 |
{{ CompatGeckoMobile(14) }} | {{ CompatUnknown() }} | 15 |
6 {{ property_prefix("WebKit")}} 7 |