Signatur
Beschreibung
Die Methode setNamedItem() fügt ein Attr-Knotenobjekt in eine NamedNodeMap ein – typischerweise in element.attributes. Existiert bereits ein Attribut mit demselben qualifizierten Namen, wird es ersetzt und das alte Attr-Objekt zurückgegeben. Andernfalls ist der Rückgabewert null.
Da element.attributes live mit dem Element verbunden ist, wirkt sich der Aufruf sofort auf das Element aus: Das Attribut erscheint im DOM, CSS-Selektoren greifen, und MutationObserver melden die Änderung. Die Methode entspricht funktional Element.prototype.setAttributeNode().
Nützlich ist setNamedItem() vor allem, wenn man mit Attr-Objekten arbeitet, etwa um ein Attribut von einem Element auf ein anderes zu übertragen oder ein mit document.createAttribute() erzeugtes Attribut einzuhängen. Für den Alltag ist element.setAttribute(name, value) meist einfacher und besser lesbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $attr Pflicht | Attr | Das einzufügende Attributobjekt, z. B. erzeugt mit document.createAttribute() oder aus einer anderen Map entfernt. Maßgeblich für das Ersetzen ist sein name. |
Rückgabewert
Attr-Objekt, falls schon ein Attribut mit gleichem Namen vorhanden war, sonst null.Beispiele
Neues Attribut erzeugen und einfügen
const button = document.createElement('button');
const attr = document.createAttribute('aria-label');
attr.value = 'Menü öffnen';
const replaced = button.attributes.setNamedItem(attr);
console.log(replaced);
console.log(button.outerHTML);
Vorhandenes Attribut ersetzen
const input = document.createElement('input');
input.setAttribute('type', 'text');
const typeAttr = document.createAttribute('type');
typeAttr.value = 'email';
const old = input.attributes.setNamedItem(typeAttr);
console.log(old.value); // altes Attr-Objekt
console.log(input.getAttribute('type'));
Attribut von einem Element auf ein anderes verschieben
const source = document.createElement('div');
source.setAttribute('data-id', '42');
const target = document.createElement('section');
// Erst aus der Quelle entfernen, sonst InUseAttributeError
const attr = source.attributes.removeNamedItem('data-id');
target.attributes.setNamedItem(attr);
console.log(source.hasAttribute('data-id'), target.dataset.id);
// Wichtig · Fallstricke
- InUseAttributeError: Gehört das
Attrbereits zu einem anderen Element (attr.ownerElementist gesetzt), wirft der Aufruf eineDOMExceptionvom TypInUseAttributeError. Entferne das Attribut vorher oder klone es mitattr.cloneNode(). - Das Einfügen desselben
Attrin dasselbe Element ist dagegen erlaubt und gibt das Attribut selbst zurück. - Bei Attributen mit Namespace (z. B.
xlink:hrefin SVG) istsetNamedItemNS()die präzisere Wahl. - In HTML-Dokumenten werden Attributnamen, die mit
document.createAttribute()erzeugt wurden, in Kleinbuchstaben umgewandelt. - Sicherheit: Werte von Ereignis-Attributen wie
onclickoder vonhrefmitjavascript:-URLs werden ausgeführt – niemals ungeprüfte Benutzereingaben so setzen (XSS). - Die Methode wird von allen Browsern unterstützt; in modernem Code ist
setAttribute()meist vorzuziehen.