Start · Sprachen · JavaScript · Referenz · Attr.prefix

Attr.prefix

Eigenschaft

Gibt das Namensraum-Präfix eines Attributs als String zurück, z. B. <code>"xlink"</code> bei <code>xlink:href</code>, oder <code>null</code>, wenn kein Präfix gesetzt ist.

seit JavaScript Baseline: alle Browser (auf Attr seit Chrome 46, F Kategorie: webapi

Signatur

get Attr.prototype.prefix

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

Typ
string | null
Beschreibung
Das Namensraum-Präfix des Attributs (z. B. "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);
xlink href xlink:href http://www.w3.org/1999/xlink

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);
}
data-id → prefix: null | localName: data-id foo:bar → prefix: null | localName: foo:bar

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>
xmlns:dc: prefix=xmlns, ns=http://www.w3.org/2000/xmlns/ dc:creator: prefix=dc, ns=http://purl.org/dc/elements/1.1/ id: prefix=null, ns=null

// Wichtig · Fallstricke

  • Schreibgeschützt: In DOM Level 3 war prefix noch 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 einen TypeError aus. Wer den Präfix ändern will, legt das Attribut mit setAttributeNS() 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 liefert prefix === null. Der ganze String landet dann in localName.
  • 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 namespaceURI zusammen mit localName.
  • Kompatibilität: Die Eigenschaft war früher auf Node definiert und wurde in neueren Browsern (z. B. Chrome 46, Firefox 48) auf Attr und Element verschoben. In aktuellen Browsern ist sie überall verfügbar. Sehr alte Engines geben bei HTML-Attributen eventuell andere Werte zurück.