Signatur
Beschreibung
removeAttributeNS() ist das namensraumbewusste Gegenstück zu removeAttribute(). Die Methode entfernt ein Attribut, das über die Kombination aus Namensraum-URI und lokalem Namen bestimmt wird, also nicht über den qualifizierten Namen mit Präfix (z. B. xlink:href).
Gebraucht wird sie vor allem bei XML-basierten Dokumenten und eingebetteten Formaten wie SVG, MathML oder eigenen XML-Dialekten, in denen Attribute zu einem Namensraum gehören, etwa xlink:href (Namensraum http://www.w3.org/1999/xlink) oder xml:lang (Namensraum http://www.w3.org/XML/1998/namespace).
Gibt es kein passendes Attribut, passiert nichts und es wird auch kein Fehler ausgelöst. Normale HTML-Attribute haben keinen Namensraum. Um sie zu entfernen, übergibt man null als Namensraum oder nimmt gleich removeAttribute().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $namespace Pflicht | string | null | Namensraum-URI des Attributs, z. B. "http://www.w3.org/1999/xlink". null oder ein leerer String steht für ein Attribut ohne Namensraum. |
|
| $localName Pflicht | string | Lokaler Name des Attributs ohne Präfix, z. B. "href" statt "xlink:href". |
Rückgabewert
undefined zurück.Beispiele
xlink:href von einem SVG-<use>-Element entfernen
const SVG_NS = 'http://www.w3.org/2000/svg';
const XLINK_NS = 'http://www.w3.org/1999/xlink';
const use = document.createElementNS(SVG_NS, 'use');
use.setAttributeNS(XLINK_NS, 'xlink:href', '#icon-star');
console.log(use.hasAttributeNS(XLINK_NS, 'href'));
// Lokaler Name ohne Präfix!
use.removeAttributeNS(XLINK_NS, 'href');
console.log(use.hasAttributeNS(XLINK_NS, 'href'));
xml:lang in einem XML-Dokument entfernen
const XML_NS = 'http://www.w3.org/XML/1998/namespace';
const xml = new DOMParser().parseFromString(
'<doc><p xml:lang="de">Hallo</p></doc>',
'application/xml'
);
const p = xml.querySelector('p');
p.removeAttributeNS(XML_NS, 'lang');
console.log(new XMLSerializer().serializeToString(xml));
Alle Attribute eines Namensraums aufräumen
const XLINK_NS = 'http://www.w3.org/1999/xlink';
const stripNamespace = (root, ns) => {
for (const el of root.querySelectorAll('*')) {
// Kopie anlegen, weil el.attributes live ist
for (const attr of [...el.attributes]) {
if (attr.namespaceURI === ns) {
el.removeAttributeNS(ns, attr.localName);
}
}
}
};
const svg = document.querySelector('svg');
if (svg) stripNamespace(svg, XLINK_NS);
Attribut ohne Namensraum mit null entfernen
const div = document.createElement('div');
div.setAttribute('data-state', 'aktiv');
div.removeAttributeNS(null, 'data-state');
console.log(div.hasAttribute('data-state'));
// Wichtig · Fallstricke
- Häufiger Fehler: den qualifizierten Namen mit Präfix übergeben, etwa
removeAttributeNS(XLINK_NS, 'xlink:href'). Das findet nichts und scheitert ohne Fehlermeldung. Richtig ist der lokale Name'href'. - Der Namensraum-URI muss exakt stimmen, auch Groß- und Kleinschreibung. Ein Präfix wie
'xlink'anstelle der URI funktioniert nicht. removeAttribute('xlink:href')kann in HTML-Dokumenten auch klappen, weil es nach dem qualifizierten Namen sucht. Das hängt aber vom Präfix ab, das beim Setzen benutzt wurde.removeAttributeNS()ist die zuverlässigere Wahl.- SVG 2 kennt
xlink:hrefnicht mehr und nutzt stattdessen ein einfacheshref. Oft muss man deshalb beide Varianten entfernen. element.attributesist eine live-NamedNodeMap. Wer beim Durchlaufen Attribute entfernt, sollte vorher eine Kopie anlegen, z. B. mit[...el.attributes].- Kompatibilität: Die Methode wird von allen modernen Browsern unterstützt, ebenso vom Internet Explorer ab Version 9.