Signatur
Beschreibung
Die schreibgeschützte Eigenschaft prefix eines Attr-Knotens liefert den Präfix-Teil des qualifizierten Attributnamens, also den Teil vor dem Doppelpunkt. Beim Attribut xlink:href ist prefix "xlink", localName ist "href" und name ist "xlink:href".
Einen Präfix bekommt ein Attribut nur, wenn es mit Namensraum angelegt wurde. Das passiert zum Beispiel über Element.setAttributeNS(), Document.createAttributeNS(), beim Parsen von XML-Dokumenten (z. B. mit DOMParser und "application/xml") oder bei bestimmten Fremdattributen wie xlink:href in SVG/MathML innerhalb von HTML. Attribute, die mit setAttribute() angelegt wurden, haben immer prefix === null, auch wenn ihr Name einen Doppelpunkt enthält.
Praktisch nützlich ist prefix vor allem, wenn man XML-, SVG- oder XHTML-Dokumente untersucht, serialisiert oder umschreibt und die ursprüngliche Schreibweise der qualifizierten Namen erhalten möchte. Welcher Namensraum tatsächlich gemeint ist, verrät aber immer namespaceURI. Der Präfix ist nur ein frei wählbares Kürzel dafür.
Rückgabewert
"xlink", "xml", "xmlns") oder null, wenn das Attribut keinen Präfix hat.Beispiele
Präfix eines SVG-xlink-Attributs auslesen
const SVG_NS = 'http://www.w3.org/2000/svg';
const XLINK_NS = 'http://www.w3.org/1999/xlink';
const use = document.createElementNS(SVG_NS, 'use');
use.setAttributeNS(XLINK_NS, 'xlink:href', '#icon-home');
const attr = use.getAttributeNodeNS(XLINK_NS, 'href');
console.log(attr.prefix); // Präfix
console.log(attr.localName); // lokaler Name
console.log(attr.name); // qualifizierter Name
console.log(attr.namespaceURI);
setAttribute() erzeugt nie einen Präfix
const div = document.createElement('div');
div.setAttribute('data-id', '42');
div.setAttribute('foo:bar', 'x'); // Doppelpunkt, aber kein Namensraum
for (const attr of div.attributes) {
console.log(attr.name, '→ prefix:', attr.prefix, '| localName:', attr.localName);
}
Attribute eines XML-Dokuments mit Namensräumen analysieren
const xml = `<feed xmlns:dc="http://purl.org/dc/elements/1.1/">
<entry dc:creator="Anna" id="e1"/>
</feed>`;
const doc = new DOMParser().parseFromString(xml, 'application/xml');
const describe = (el) => {
for (const { name, prefix, namespaceURI } of el.attributes) {
console.log(`${name}: prefix=${prefix}, ns=${namespaceURI}`);
}
};
describe(doc.documentElement); // <feed>
describe(doc.querySelector('entry')); // <entry>
// Wichtig · Fallstricke
- Schreibgeschützt: In DOM Level 3 war
prefixnoch beschreibbar, heute nicht mehr. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert. Im Strict Mode, also auch in ES-Modulen und Klassen, löst sie einenTypeErroraus. Wer den Präfix ändern will, legt das Attribut mitsetAttributeNS()und dem neuen qualifizierten Namen neu an und entfernt das alte. - Doppelpunkt heißt nicht Präfix:
setAttribute('xml:lang', 'de')in einem HTML-Dokument liefertprefix === null. Der ganze String landet dann inlocalName. - Für Vergleiche nicht geeignet: Präfixe sind beliebige Kürzel. Dasselbe Attribut kann in einem anderen Dokument einen anderen Präfix tragen. Für eine robuste Erkennung prüft man
namespaceURIzusammen mitlocalName. - Kompatibilität: Die Eigenschaft war früher auf
Nodedefiniert und wurde in neueren Browsern (z. B. Chrome 46, Firefox 48) aufAttrundElementverschoben. In aktuellen Browsern ist sie überall verfügbar. Sehr alte Engines geben bei HTML-Attributen eventuell andere Werte zurück.