Node#
Node.lookupNamespaceURI()#
Metoda lookupNamespaceURI()
zwraca przestrzeń nazw pasującą do przekazanego prefiksu przestrzeni nazw dla danego węzła. W przypadku braku dopasowania zwrócona zostanie wartość null
.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var namespace = node.lookupNamespaceURI(prefix);
gdzie poszczególne człony oznaczają:
- namespace - łańcuch znakowy reprezentujący przestrzeń nazw pasującą do przekazanego prefiksu przestrzeni nazw lub wartość
null
. - node - węzeł będący obiektem kontekstu.
- prefix - łańcuch znakowy reprezentujący prefiks przestrzeni nazw pasujący do poszukiwanej przestrzeni nazw lub wartość
null
. Pusty łańcuch znakowy ma identyczne działanie jak przekazanie wartościnull
.
Algorytm wywołania metody lookupNamespaceURI(prefix)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Jeśli prefix jest pustym łańcuchem znakowym, to ustaw go na wartość
null
. - Zwróć wynik lokalizacji przestrzeni nazw dla obiektu kontekstu z przekazaniem prefix.
Analizując dokładnie wszystkie powiązane z metodą lookupNamespaceURI()
algorytmy można zauważyć, że sprawdzanie przestrzeni nazw powiązanej z przekazanym prefiksem przestrzeni nazw może przechodzić na inne węzły (zawsze są to elementy), wszystko zależy od rodzaju aktualnie weryfikowanego węzła.
Warto podkreślić, że przekazanie do metody lookupNamespaceURI()
wartości null
lub pustego łańcucha znakowego zaowocuje tym, że wyszukiwana będzie domyślna przestrzeń nazw dla danego węzła. Praktycznie rzecz biorąc, to metoda lookupNamespaceURI()
w połączeniu z kilkoma dodatkowymi linijkami kodu pozwala zasymulować metodę Node.isDefaultNamespace()
.
Prosty przykład:
<script>
document.write(document.lookupNamespaceURI("")); // http://www.w3.org/1999/xhtml - przechodzi na HTML
document.write("<br>");
document.write(document.lookupNamespaceURI(null)); // http://www.w3.org/1999/xhtml - przechodzi na HTML
document.write("<br>");
document.write(document.documentElement.namespaceURI); // http://www.w3.org/1999/xhtml - dla HTML
document.write("<br>");
document.write(document.documentElement.prefix); // null - dla HTML
document.write("<br><br>");
// Tworzymy nowe elementy z różnymi przestrzeniami nazw i prefiksami
var newDiv = document.createElementNS("www.test.pl", "ns:div");
var newTest = document.createElementNS("www.test.pl", "test");
var newP = document.createElement("p");
newDiv.appendChild(newTest);
newDiv.appendChild(newP);
// Odczytujemy przestrzeń nazw i prefiks ustawione w czasie tworzenia węzła
document.write(newDiv.namespaceURI + " | " + newDiv.prefix); // www.test.pl | ns
document.write("<br>");
document.write(newTest.namespaceURI + " | " + newTest.prefix); // www.test.pl | null
document.write("<br>");
document.write(newP.namespaceURI + " | " + newP.prefix); // http://www.w3.org/1999/xhtml | null
document.write("<br><br>");
// Wyszukujemy przestrzeń nazw pasującą do przekazanego prefiksu (która może być odczytywana z rodzica węzła)
document.write(newDiv.lookupNamespaceURI("ns")); // www.test.pl
document.write("<br>");
document.write(newTest.lookupNamespaceURI("ns")); // www.test.pl - sprawdzanie przeszło z newTest na rodzica newDiv
document.write("<br>");
document.write(newP.lookupNamespaceURI("ns")); // www.test.pl - sprawdzanie przeszło z newP na rodzica newDiv
document.write("<br><br>");
document.write(document.createDocumentFragment().lookupNamespaceURI("")); // null
document.write("<br>");
document.write(document.createDocumentFragment().lookupNamespaceURI(null)); // null
</script>
Na chwilę obecną żadna aktualna przeglądarka nie obsługuje metody lookupNamespaceURI()
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 { DOMString? lookupNamespaceURI(DOMString? prefix); }