Signatur
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 Ergebnisnull. - 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
"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'));
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));
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));
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));
// Wichtig · Fallstricke
- Standard-Namespace: Für einen per
xmlns="…"gesetzten Namespace ist das Ergebnis immernull, obwohl der Namespace verwendet wird. Das prüft man mitisDefaultNamespace(). - 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. ausDOMParsermitapplication/xmloder ausXMLHttpRequest.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.comundhttp://example.com/gelten als verschiedene URIs. - Umkehrung: Die Gegenrichtung (vom Präfix zum URI) übernimmt
lookupNamespaceURI(). Diese Methode behandelt die Präfixexmlundxmlnsfest,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.