Signatur
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 Ergebnisnull. - 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 nurisDefaultNamespace(null)bzw.isDefaultNamespace("")den Werttrue.
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
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(''));
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'));
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);
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));