Node#
Node.isDefaultNamespace()#
Metoda isDefaultNamespace()
zwraca boolowską wartość true
jeśli przekazana przestrzeń nazw jest zgodna z domyślną przestrzenią nazw dla danego węzła, w przeciwnym razie zwrócona zostanie wartość false
.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var is_default = node.isDefaultNamespace(namespace);
gdzie poszczególne człony oznaczają:
- is_default - boolowskie
true
lubfalse
. - node - węzeł będący obiektem kontekstu.
- namespace - łańcuch znakowy reprezentujący przestrzeń nazw porównywaną z domyślną przestrzenią nazw lub wartość
null
. Pusty łańcuch znakowy ma identyczne działanie jak przekazanie wartościnull
.
Algorytm wywołania metody isDefaultNamespace(namespace)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Jeśli namespace jest pustym łańcuchem znakowym, to ustaw ją na wartość
null
. - Niech defaultNamespace będzie wynikiem lokalizacji przestrzeni nazw dla obiektu kontekstu z przekazaniem wartości
null
. - Zwróć boolowską wartość
true
jeśli defaultNamespace jest identyczna z namespace, w przeciwnym razie zwróć boolowską wartośćfalse
.
Analizując dokładnie wszystkie powiązane z metodą isDefaultNamespace()
algorytmy można zauważyć, że sprawdzanie przekazanej przestrzeni nazw pod kątem zgodności z domyślną przestrzenią nazw może przechodzić na inne węzły (zawsze są to elementy), wszystko zależy od rodzaju aktualnie weryfikowanego węzła.
Alternatywnie można skorzystać z podobnie działającej metody Node.lookupNamespaceURI()
w połączeniu z kilkoma dodatkowymi linijkami kodu.
Prosty przykład:
<script>
document.write(document.isDefaultNamespace("")); // false (Opera, Chrome, IE9), true (Firefox)
document.write("<br>");
document.write(document.body.isDefaultNamespace(null)); // false (Opera, Chrome, IE9), true (Firefox)
document.write("<br>");
document.write(document.isDefaultNamespace("http://www.w3.org/1999/xhtml")); // true (Opera, Chrome, IE9), false(Firefox)
document.write("<br><br>");
// Tworzymy nowe elementy z różnymi przestrzeniami nazw
var newDiv = document.createElementNS("www.test.pl", "div");
var newTest = document.createElementNS("", "test");
var newP = document.createElement("p");
newDiv.appendChild(newTest);
newDiv.appendChild(newP);
// Odczytujemy przestrzeń nazw ustawioną w czasie tworzenia węzła
document.write(newDiv.namespaceURI); // www.test.pl
document.write("<br>");
document.write(newTest.namespaceURI); // null
document.write("<br>");
document.write(newP.namespaceURI); // http://www.w3.org/1999/xhtml
document.write("<br><br>");
// Porównujemy przekazaną przestrzeń nazw z domyślną przestrzeń nazw węzła (która może być odczytywana z rodzica węzła)
document.write(newDiv.isDefaultNamespace("www.test.pl")); // true
document.write("<br>");
document.write(newTest.isDefaultNamespace("www.test.pl")); // true - sprawdzanie przeszło z newTest na rodzica newDiv
document.write("<br>");
document.write(newP.isDefaultNamespace("www.test.pl")); // false
document.write("<br><br>");
document.write(document.implementation.createDocument(null, "", null).isDefaultNamespace("")); // false - zgodnie z algorytmem nie powinno być true?
document.write("<br>");
document.write(document.implementation.createDocument("www.test.pl", "", null).isDefaultNamespace("www.test.pl")); // false - zgodnie z algorytmem nie powinno być true?
document.write("<br>");
document.write(document.implementation.createDocument("www.test.pl", "root", null).isDefaultNamespace("www.test.pl")); // true
document.write("<br><br>");
document.write(document.createDocumentFragment().isDefaultNamespace("http://www.w3.org/1999/xhtml")); // false
document.write("<br>");
document.write(document.createDocumentFragment().isDefaultNamespace(null)); // false - zgodnie z algorytmem nie powinno być true?
</script>
Na chwilę obecną żadna aktualna przeglądarka nie obsługuje metody isDefaultNamespace()
zgodnie ze wszystkimi wymaganiami specyfikacji DOM4. Wynika to z odmiennego sposobu ustawiania i eksponowania domyślnej przestrzeni nazw w elementach. Oczekuje się, że w niedalekiej przyszłości wszystkie te nieścisłości zostaną wyeliminowane (DOM - Bug 27456, Mozilla - Bug 1061578).
Składnia Web IDL#
interface Node : EventTarget { boolean isDefaultNamespace(DOMString? namespace); }