Start · Sprachen · JavaScript · Referenz · Element.removeAttributeNS()

Element.removeAttributeNS()

Methode

Entfernt das Attribut mit dem angegebenen Namensraum-URI und lokalen Namen von einem Element.

seit JavaScript Baseline: alle Browser (DOM Level 2) Kategorie: webapi

Signatur

Element.prototype.removeAttributeNS(namespace, localName)

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

Typ
void
Beschreibung
Gibt 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'));
true false

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));
<doc><p>Hallo</p></doc>

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'));
false

// 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:href nicht mehr und nutzt stattdessen ein einfaches href. Oft muss man deshalb beide Varianten entfernen.
  • element.attributes ist 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.