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

Element.hasAttributeNS()

Methode

Prüft, ob ein Element ein Attribut mit dem angegebenen Namensraum-URI und lokalen Namen besitzt, und gibt <code>true</code> oder <code>false</code> zurück.

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

Signatur

Element.prototype.hasAttributeNS(namespace, localName)

Beschreibung

hasAttributeNS() ist die namensraumbewusste Variante von hasAttribute(). Die Methode prüft, ob am Element ein Attribut vorhanden ist, das sowohl zum angegebenen Namensraum-URI als auch zum lokalen Namen passt. Das Präfix (z. B. xlink:) spielt dabei keine Rolle. Entscheidend ist allein der Namensraum-URI, an den das Präfix gebunden ist.

Gebraucht wird die Methode vor allem bei XML-basierten Dokumenten und eingebetteten Formaten wie SVG, MathML oder eigenen XML-Dialekten. Typische Beispiele sind xlink:href in älterem SVG-Markup oder Attribute aus dem Namensraum xml: (z. B. xml:lang).

Normale HTML-Attribute wie id, class oder data-* haben keinen Namensraum. Um sie zu prüfen, übergibt man als Namensraum null (oder einen leeren String). In reinem HTML ist hasAttribute() meist die einfachere Wahl.

Parameter

Name Typ Default Beschreibung
$namespace Pflicht string | null Namensraum-URI des gesuchten Attributs, z. B. "http://www.w3.org/1999/xlink". Für Attribute ohne Namensraum null oder "" übergeben.
$localName Pflicht string Lokaler Name des Attributs ohne Präfix, z. B. "href" statt "xlink:href".

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Element ein passendes Attribut besitzt, sonst false. Auch ein leerer Attributwert ergibt true.

Beispiele

xlink:href an einem SVG-&lt;use&gt;-Element prüfen

const XLINK_NS = 'http://www.w3.org/1999/xlink';
const SVG_NS = 'http://www.w3.org/2000/svg';

const use = document.createElementNS(SVG_NS, 'use');
use.setAttributeNS(XLINK_NS, 'xlink:href', '#icon-star');

// Nur der lokale Name zählt, nicht das Präfix
console.log(use.hasAttributeNS(XLINK_NS, 'href'));
console.log(use.hasAttributeNS(XLINK_NS, 'xlink:href'));
console.log(use.hasAttribute('href'));
true false false

Legacy-Fallback: modernes href oder xlink:href lesen

const XLINK_NS = 'http://www.w3.org/1999/xlink';

const getUseTarget = (useEl) => {
  if (useEl.hasAttributeNS(null, 'href')) {
    return useEl.getAttributeNS(null, 'href');
  }
  if (useEl.hasAttributeNS(XLINK_NS, 'href')) {
    return useEl.getAttributeNS(XLINK_NS, 'href');
  }
  return null;
};

document.querySelectorAll('svg use').forEach((el) => {
  console.log('Verweist auf:', getUseTarget(el));
});
Verweist auf: #icon-star

Namensraum-Attribute in einem geparsten XML-Dokument

const xml = `<buch xmlns:meta="https://example.com/meta" meta:isbn="978-3-16-148410-0" titel="JS lernen"/>`;
const doc = new DOMParser().parseFromString(xml, 'application/xml');
const buch = doc.documentElement;

console.log(buch.hasAttributeNS('https://example.com/meta', 'isbn'));
console.log(buch.hasAttributeNS(null, 'titel'));
console.log(buch.hasAttributeNS(null, 'isbn'));
true true false

// Wichtig · Fallstricke

  • Lokaler Name statt qualifiziertem Namen: Mit hasAttributeNS(ns, 'xlink:href') findet die Methode nichts. Richtig ist 'href'.
  • Groß- und Kleinschreibung: Anders als hasAttribute() an HTML-Elementen wandelt hasAttributeNS() den Namen nicht in Kleinbuchstaben um. Der Vergleich beachtet also immer Groß- und Kleinschreibung.
  • Kein Namensraum: Ein leerer String wird wie null behandelt. Attribute, die per setAttribute() gesetzt wurden, haben keinen Namensraum.
  • HTML-Parser: Im HTML-Parser (text/html) bekommen nur bekannte fremde Attribute wie xlink:href oder xml:lang innerhalb von SVG/MathML einen Namensraum. Selbst geschriebene Präfixe wie foo:bar werden dort zu gewöhnlichen Attributnamen ohne Namensraum.
  • Kompatibilität: Wird von allen modernen Browsern und seit dem IE 9 unterstützt. xlink:href ist in SVG 2 veraltet. Neuer Code sollte das einfache href verwenden.