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

Node.isDefaultNamespace()

Methode

Prüft, ob die übergebene Namespace-URI am aktuellen Knoten der Standard-Namespace ist, also der Namespace ohne Präfix. Das Ergebnis ist ein boolescher Wert.

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

Signatur

Node.prototype.isDefaultNamespace(namespaceURI)

Beschreibung

Die Methode isDefaultNamespace() des Node-Interface erwartet eine Namespace-URI als Argument. Sie gibt true zurück, wenn genau diese URI am aktuellen Knoten der Standard-Namespace ist, also der Namespace ohne Präfix. Andernfalls gibt sie false zurück. Intern sucht der Browser den Namespace für das Präfix null, genau wie bei node.lookupNamespaceURI(null), und vergleicht das Ergebnis mit dem Argument.

Gebraucht wird die Methode vor allem bei der Arbeit mit XML-Dokumenten (z. B. über DOMParser oder XMLHttpRequest.responseXML), mit SVG oder MathML, und bei Code, der Knoten aus verschiedenen Namespaces zusammenführt. So lässt sich vor dem Erzeugen neuer Elemente mit document.createElementNS() prüfen, ob Kind-Elemente ohne Präfix im erwarteten Namespace landen würden.

Wie die Suche abläuft, hängt vom Knotentyp ab:

  • Element: Hat das Element selbst kein Präfix, zählt sein eigener Namespace. Sonst wird ein xmlns-Attribut ausgewertet, und danach wird die Suche beim Elternelement fortgesetzt.
  • Document: Die Suche läuft über das documentElement. Gibt es keins, ist das Ergebnis null.
  • Attr: Die Suche läuft über das Element, zu dem das Attribut gehört.
  • Text, Comment u. a.: Die Suche läuft über das Elternelement.
  • DocumentType, DocumentFragment: Das Ergebnis ist immer null. Deshalb liefert hier nur isDefaultNamespace(null) bzw. isDefaultNamespace("") den Wert true.

In HTML-Dokumenten gehören alle HTML-Elemente zum XHTML-Namespace http://www.w3.org/1999/xhtml. Eingebettete <svg>-Elemente haben dagegen den Standard-Namespace http://www.w3.org/2000/svg.

Parameter

Name Typ Default Beschreibung
$namespaceURI Pflicht string | null Die zu prüfende Namespace-URI. Ein leerer String "" wird wie null behandelt, also als „kein Namespace“. Die URI wird exakt verglichen, Groß-/Kleinschreibung zählt, es findet keine Normalisierung statt.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn namespaceURI am Knoten der Standard-Namespace ist, sonst false.

Beispiele

HTML- und SVG-Namespace im Dokument prüfen

const XHTML_NS = 'http://www.w3.org/1999/xhtml';
const SVG_NS = 'http://www.w3.org/2000/svg';

// HTML-Wurzelelement
console.log(document.documentElement.isDefaultNamespace(XHTML_NS));

// Inline-SVG im HTML-Dokument
const svg = document.createElementNS(SVG_NS, 'svg');
document.body.append(svg);

console.log(svg.isDefaultNamespace(SVG_NS));
console.log(svg.isDefaultNamespace(XHTML_NS));
console.log(document.body.isDefaultNamespace(''));
true true false false

XML-Dokument mit Standard-Namespace und Präfix auswerten

const xmlText = `
<katalog xmlns="urn:beispiel:buecher" xmlns:m="urn:beispiel:meta">
  <buch><m:isbn>978-3-16-148410-0</m:isbn></buch>
</katalog>`;

const doc = new DOMParser().parseFromString(xmlText, 'application/xml');
const buch = doc.querySelector('buch');
const isbn = buch.firstElementChild;

console.log(doc.isDefaultNamespace('urn:beispiel:buecher'));
console.log(buch.isDefaultNamespace('urn:beispiel:buecher'));
// Das Präfix m: ändert nichts am Standard-Namespace
console.log(isbn.isDefaultNamespace('urn:beispiel:meta'));
console.log(isbn.lookupNamespaceURI('m'));
true true false urn:beispiel:meta

Vor dem Einfügen prüfen, ob Kind-Elemente im richtigen Namespace landen

const ATOM_NS = 'http://www.w3.org/2005/Atom';

const addEntry = (parent, title) => {
  // Ist Atom kein Standard-Namespace, braucht das neue Element ein Präfix
  const qualifiedName = parent.isDefaultNamespace(ATOM_NS)
    ? 'entry'
    : `${parent.lookupPrefix(ATOM_NS) ?? 'atom'}:entry`;

  const entry = parent.ownerDocument.createElementNS(ATOM_NS, qualifiedName);
  entry.textContent = title;
  parent.append(entry);
  return entry;
};

const feed = new DOMParser().parseFromString(
  `<feed xmlns="${ATOM_NS}"></feed>`,
  'application/xml'
).documentElement;

console.log(addEntry(feed, 'Neuer Artikel').tagName);
entry

Sonderfälle: DocumentFragment und Elemente mit Präfix

const frag = document.createDocumentFragment();
console.log(frag.isDefaultNamespace(null)); // Fragment hat nie einen Namespace
console.log(frag.isDefaultNamespace(''));   // '' wird wie null behandelt

// Element mit Präfix, nicht im Dokument eingehängt
const item = document.createElementNS('urn:x', 'x:item');
console.log(item.isDefaultNamespace('urn:x')); // Präfix x, kein Standard
console.log(item.isDefaultNamespace(null));
true true false true