Start · Sprachen · JavaScript · Referenz · Node.lookupPrefix()

Node.lookupPrefix()

Methode

Gibt das Präfix zurück, das im Kontext des Knotens an einen Namespace-URI gebunden ist, oder <code>null</code>, wenn es kein passendes Präfix gibt.

seit JavaScript DOM Level 3 – Baseline: alle modernen Browser Kategorie: webapi

Signatur

Node.prototype.lookupPrefix(namespace)

Beschreibung

lookupPrefix() sucht vom aktuellen Knoten aus nach oben durch die Vorfahren und liefert das Präfix, das an den angegebenen Namespace-URI gebunden ist, z. B. "dc" für xmlns:dc="http://purl.org/dc/elements/1.1/". Berücksichtigt werden das eigene Präfix des Elements (wenn sein Namespace passt) und xmlns:*-Attribute am Element und an allen Vorfahren.

Die Methode ist vor allem bei der Verarbeitung von XML-Dokumenten nützlich, etwa RSS/Atom, SVG, XHTML oder SOAP. Man braucht sie, wenn man Elemente mit dem richtigen Präfix erzeugen oder XPath-Ausdrücke dynamisch zusammensetzen will, ohne die Präfixe fest im Code zu hinterlegen.

Welcher Knoten als Startpunkt dient, hängt vom Knotentyp ab:

  • Element: das Element selbst.
  • Document: das documentElement. Gibt es keins, ist das Ergebnis null.
  • Attr: das ownerElement.
  • DocumentType und DocumentFragment: immer null.
  • Andere Knoten (Text, Kommentar usw.): das Elternelement.

Ein Standard-Namespace (xmlns="…") hat kein Präfix. Für ihn gibt lookupPrefix() deshalb null zurück. Um zu prüfen, ob ein URI der Standard-Namespace ist, verwendet man isDefaultNamespace().

Parameter

Name Typ Default Beschreibung
$namespace Pflicht string | null Der Namespace-URI, zu dem das Präfix gesucht wird. Bei null oder "" ist das Ergebnis immer null. Der Vergleich ist ein exakter Zeichenkettenvergleich und unterscheidet Groß- und Kleinschreibung.

Rückgabewert

Typ
string | null
Beschreibung
Das gefundene Präfix ohne Doppelpunkt, z. B. "dc". Gibt es keine Bindung, ist nur der Standard-Namespace betroffen oder ist der Knotentyp nicht zulässig, kommt null zurück.

Beispiele

Präfix in einem XML-Dokument ermitteln

const xml = `<buch xmlns:dc="http://purl.org/dc/elements/1.1/">
  <dc:title>JavaScript lernen</dc:title>
</buch>`;

const doc = new DOMParser().parseFromString(xml, 'application/xml');
const DC = 'http://purl.org/dc/elements/1.1/';

const title = doc.getElementsByTagNameNS(DC, 'title')[0];

console.log(title.lookupPrefix(DC));                  // eigenes Präfix
console.log(doc.documentElement.lookupPrefix(DC));    // über xmlns:dc
console.log(title.firstChild.lookupPrefix(DC));       // Textknoten → Elternelement
console.log(title.lookupPrefix('http://example.com/unbekannt'));
dc dc dc null

Standard-Namespace hat kein Präfix

const atom = `<feed xmlns="http://www.w3.org/2005/Atom"><title>News</title></feed>`;
const doc = new DOMParser().parseFromString(atom, 'application/xml');
const ATOM = 'http://www.w3.org/2005/Atom';
const feed = doc.documentElement;

console.log(feed.lookupPrefix(ATOM));        // kein Präfix gebunden
console.log(feed.isDefaultNamespace(ATOM));  // aber Standard-Namespace
console.log(feed.lookupPrefix(null));
null true null

Neues Element mit dem vorhandenen Präfix anlegen

const xml = `<rss xmlns:media="http://search.yahoo.com/mrss/"><item/></rss>`;
const doc = new DOMParser().parseFromString(xml, 'application/xml');
const MEDIA = 'http://search.yahoo.com/mrss/';
const item = doc.querySelector('item');

// Präfix aus dem Dokument übernehmen statt es fest einzutragen
const prefix = item.lookupPrefix(MEDIA) ?? 'media';
const thumb = doc.createElementNS(MEDIA, `${prefix}:thumbnail`);
thumb.setAttribute('url', 'https://example.com/bild.jpg');
item.append(thumb);

console.log(new XMLSerializer().serializeToString(doc));
<rss xmlns:media="http://search.yahoo.com/mrss/"><item><media:thumbnail url="https://example.com/bild.jpg"/></item></rss>

Verhalten im HTML-Dokument

// In HTML-Dokumenten liegen Elemente im XHTML-Namespace, aber ohne Präfix
const XHTML = 'http://www.w3.org/1999/xhtml';
console.log(document.documentElement.lookupPrefix(XHTML));
console.log(document.createDocumentFragment().lookupPrefix(XHTML));
null null

// Wichtig · Fallstricke

  • Standard-Namespace: Für einen per xmlns="…" gesetzten Namespace ist das Ergebnis immer null, obwohl der Namespace verwendet wird. Das prüft man mit isDefaultNamespace().
  • HTML-Dokumente: Normale HTML-Elemente und eingebettetes SVG haben kein Präfix, deshalb liefert die Methode dort meist null. Sinnvoll ist sie vor allem für XML-Dokumente, z. B. aus DOMParser mit application/xml oder aus XMLHttpRequest.responseXML.
  • Mehrere Präfixe für denselben URI: Die Methode gibt nur ein Präfix zurück. Das ist das erste passende am nächstgelegenen Element. Andere Bindungen werden nicht gemeldet.
  • Exakter Vergleich: URIs werden nicht normalisiert. http://example.com und http://example.com/ gelten als verschiedene URIs.
  • Umkehrung: Die Gegenrichtung (vom Präfix zum URI) übernimmt lookupNamespaceURI(). Diese Methode behandelt die Präfixe xml und xmlns fest, lookupPrefix() tut das nicht.
  • Kompatibilität: Wird von allen modernen Browsern und von DOM-Implementierungen wie jsdom unterstützt. Ältere Internet-Explorer-Versionen (vor IE 9) kennen die Methode nicht.