--- 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 );
callback
MutationRecord
-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
);
target
options
MutationObserverInit
-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 MutationRecord
s zurück.
MutationObserverInit
MutationObserverInit
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. |
MutationRecord
Als 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 |