Signatur
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
true, wenn das Element ein passendes Attribut besitzt, sonst false. Auch ein leerer Attributwert ergibt true.Beispiele
xlink:href an einem SVG-<use>-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'));
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));
});
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'));
// 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 wandelthasAttributeNS()den Namen nicht in Kleinbuchstaben um. Der Vergleich beachtet also immer Groß- und Kleinschreibung. - Kein Namensraum: Ein leerer String wird wie
nullbehandelt. Attribute, die persetAttribute()gesetzt wurden, haben keinen Namensraum. - HTML-Parser: Im HTML-Parser (
text/html) bekommen nur bekannte fremde Attribute wiexlink:hrefoderxml:langinnerhalb von SVG/MathML einen Namensraum. Selbst geschriebene Präfixe wiefoo:barwerden dort zu gewöhnlichen Attributnamen ohne Namensraum. - Kompatibilität: Wird von allen modernen Browsern und seit dem IE 9 unterstützt.
xlink:hrefist in SVG 2 veraltet. Neuer Code sollte das einfachehrefverwenden.