Signatur
Beschreibung
Die Methode removeNamedItemNS() entfernt aus einer NamedNodeMap, meist element.attributes, das Attribut, dessen Namespace-URI und lokaler Name passen. Das entfernte Attr-Objekt wird zurückgegeben. So kann man es zum Beispiel später mit setNamedItemNS() wieder einfügen oder an ein anderes Element hängen.
Gebraucht wird sie vor allem bei XML-Dokumenten, SVG und MathML. Dort gibt es Attribute mit Namespace, etwa xlink:href im Namespace http://www.w3.org/1999/xlink oder xml:lang. Verglichen wird mit dem lokalen Namen ohne Präfix, also href statt xlink:href. Das Präfix spielt keine Rolle.
Findet die Methode kein passendes Attribut, gibt sie nicht null zurück, sondern wirft eine DOMException vom Typ NotFoundError. Im Alltag ist Element.removeAttributeNS() meist bequemer: Sie wirft keinen Fehler, gibt aber auch nichts zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $namespace Pflicht | string | null | Namespace-URI des Attributs, z. B. "http://www.w3.org/1999/xlink". Für Attribute ohne Namespace null übergeben. Ein leerer String wird wie null behandelt. |
|
| $localName Pflicht | string | Lokaler Name des Attributs ohne Präfix, z. B. "href" statt "xlink:href". |
Rückgabewert
Attr-Objekt. Es ist danach an kein Element mehr gebunden (ownerElement ist null).Beispiele
xlink:href von einem SVG-Element entfernen
const XLINK = 'http://www.w3.org/1999/xlink';
const SVG = 'http://www.w3.org/2000/svg';
const use = document.createElementNS(SVG, 'use');
use.setAttributeNS(XLINK, 'xlink:href', '#icon-star');
const removed = use.attributes.removeNamedItemNS(XLINK, 'href');
console.log(removed.name, removed.value);
console.log(use.hasAttributeNS(XLINK, 'href'));
Fehler abfangen, wenn das Attribut fehlt
const removeAttrSafe = (el, ns, name) => {
try {
return el.attributes.removeNamedItemNS(ns, name);
} catch (err) {
if (err.name === 'NotFoundError') return null;
throw err;
}
};
const div = document.createElement('div');
console.log(removeAttrSafe(div, null, 'data-id'));
Attribut zwischen Elementen verschieben (XML)
const xml = new DOMParser().parseFromString(
'<root xmlns:app="urn:app"><a app:state="open"/><b/></root>',
'application/xml'
);
const [a, b] = xml.documentElement.children;
const attr = a.attributes.removeNamedItemNS('urn:app', 'state');
b.attributes.setNamedItemNS(attr);
console.log(new XMLSerializer().serializeToString(xml));
// Wichtig · Fallstricke
- Gibt es kein passendes Attribut, wirft die Methode eine
DOMExceptionNotFoundError. Deshalb vorher mithasAttributeNS()prüfen oder den Fehler abfangen. - Verglichen wird nur mit dem lokalen Namen. Wer
\"xlink:href\"übergibt, findet nichts. - Die Namespace-URI muss exakt stimmen, auch bei Groß-/Kleinschreibung und am Ende, etwa bei einem abschließenden Schrägstrich.
- Normale HTML-Attribute haben keinen Namespace. Für sie
nullübergeben oder gleichremoveNamedItem()verwenden. NamedNodeMapist live: Wer beim Durchlaufen per Index Attribute entfernt, verschiebt die Indizes. Besser vorher mitArray.from()kopieren.- Wird in allen modernen Browsern und in DOM-Implementierungen wie jsdom unterstützt.