Start · Sprachen · JavaScript · Referenz · NamedNodeMap.removeNamedItemNS()

NamedNodeMap.removeNamedItemNS()

Methode

Entfernt das <code>Attr</code> mit passendem Namespace-URI und lokalem Namen aus der <code>NamedNodeMap</code> und gibt es zurück.

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

Signatur

NamedNodeMap.prototype.removeNamedItemNS(namespace, localName)

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

Typ
Attr
Beschreibung
Das entfernte 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'));
xlink:href #icon-star false

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

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));
<root xmlns:app="urn:app"><a/><b app:state="open"/></root>

// Wichtig · Fallstricke

  • Gibt es kein passendes Attribut, wirft die Methode eine DOMException NotFoundError. Deshalb vorher mit hasAttributeNS() 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 gleich removeNamedItem() verwenden.
  • NamedNodeMap ist live: Wer beim Durchlaufen per Index Attribute entfernt, verschiebt die Indizes. Besser vorher mit Array.from() kopieren.
  • Wird in allen modernen Browsern und in DOM-Implementierungen wie jsdom unterstützt.