Signatur
Beschreibung
Die schreibgeschützte Eigenschaft attrChange der Schnittstelle MutationEvent sagt aus, welche Art von Attributänderung ein DOMAttrModified-Ereignis ausgelöst hat. Der Wert ist eine der drei Konstanten, die auf MutationEvent definiert sind:
MutationEvent.MODIFICATION(1): Der Wert eines vorhandenen Attributs wurde geändert.MutationEvent.ADDITION(2): Das Attribut wurde neu hinzugefügt.MutationEvent.REMOVAL(3): Das Attribut wurde entfernt.
Zusammen mit attrName, prevValue und newValue ließ sich damit früher genau nachvollziehen, was mit einem Attribut passiert ist. Bei allen anderen Mutation-Events (z. B. DOMNodeInserted, DOMSubtreeModified) ist der Wert bedeutungslos und in der Regel 0.
Wichtig: Mutation-Events sind veraltet und werden aus den Browsern entfernt. Für neuen Code sollte man ausschließlich MutationObserver verwenden. Dort gibt es kein direktes Gegenstück zu attrChange, aber die Art der Änderung lässt sich aus MutationRecord.oldValue und dem aktuellen Attributwert ableiten (siehe Beispiele).
Rückgabewert
1 (MODIFICATION), 2 (ADDITION) oder 3 (REMOVAL). Bei Ereignissen, die kein DOMAttrModified sind, normalerweise 0.Beispiele
Art der Attributänderung auswerten (Altcode)
const box = document.querySelector('#box');
const arten = {
[MutationEvent.MODIFICATION]: 'geändert',
[MutationEvent.ADDITION]: 'hinzugefügt',
[MutationEvent.REMOVAL]: 'entfernt'
};
const onAttr = (event) => {
console.log(`${event.attrName} ${arten[event.attrChange]}:`,
event.prevValue, '→', event.newValue);
};
box.addEventListener('DOMAttrModified', onAttr);
box.setAttribute('data-status', 'aktiv'); // ADDITION
box.setAttribute('data-status', 'inaktiv'); // MODIFICATION
box.removeAttribute('data-status'); // REMOVAL
// Listener wieder entfernen
box.removeEventListener('DOMAttrModified', onAttr);
Moderner Ersatz: attrChange mit MutationObserver nachbilden
const box = document.querySelector('#box');
const ermittleArt = (record) => {
const aktuell = record.target.getAttribute(record.attributeName);
if (record.oldValue === null) return 'hinzugefügt'; // entspricht ADDITION
if (aktuell === null) return 'entfernt'; // entspricht REMOVAL
return 'geändert'; // entspricht MODIFICATION
};
const observer = new MutationObserver((records) => {
for (const record of records) {
console.log(`${record.attributeName} ${ermittleArt(record)}`);
}
});
observer.observe(box, { attributes: true, attributeOldValue: true });
box.setAttribute('title', 'Hallo');
box.setAttribute('title', 'Welt');
box.removeAttribute('title');
Feature-Erkennung vor der Nutzung
const hatMutationEvents = typeof window.MutationEvent === 'function'
&& 'attrChange' in MutationEvent.prototype;
console.log(hatMutationEvents
? 'MutationEvent verfügbar – trotzdem besser MutationObserver nutzen'
: 'Kein MutationEvent – MutationObserver verwenden');
// Wichtig · Fallstricke
- Veraltet: Mutation-Events sind aus der Spezifikation gestrichen. Chromium-Browser (Chrome, Edge) haben sie ab Version 127 standardmäßig entfernt, und Firefox und Safari wollen folgen. Neuer Code sollte sich nicht darauf verlassen.
- Uneinheitliche Unterstützung: Chrome/Blink hat
DOMAttrModifiednie ausgelöst.attrChangewar dort also auch vor der Entfernung praktisch nicht nutzbar. Verlässlich lief es vor allem in Firefox und älteren Opera-Versionen. - Leistung: Mutation-Events laufen synchron bei jeder DOM-Änderung und bremsen DOM-Operationen spürbar aus.
MutationObserversammelt die Änderungen dagegen und liefert sie asynchron als Mikrotask. - Der Wert ist nur bei
DOMAttrModifiedsinnvoll. Bei anderen Mutation-Events ist er0. - Statt der Zahlen besser die Konstanten
MutationEvent.MODIFICATION,ADDITIONundREMOVALverwenden, das ist lesbarer.