Node#
Node.lookupPrefix()#
Metoda lookupPrefix()
zwraca prefiks przestrzeni nazw pasujący do przekazanej 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 prefix = node.lookupPrefix(namespace);
gdzie poszczególne człony oznaczają:
- prefix - łańcuch znakowy reprezentujący prefiks przestrzeni nazw pasujący do przekazanej przestrzeni nazw lub wartość
null
. - node - węzeł będący obiektem kontekstu.
- namespace - łańcuch znakowy reprezentujący przestrzeń nazw pasującą do poszukiwanego prefiksu przestrzeni nazw lub wartość
null
. Pusty łańcuch znakowy ma identyczne działanie jak przekazanie wartościnull
.
Algorytm wywołania metody lookupPrefix(namespace)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Jeśli namespace ma wartość
null
lub jest pustym łańcuchem znakowym, to zwróć wartośćnull
. W przeciwnym razie, w zależności od obiektu kontekstu, wykonaj poniższe podkroki:
- Dla węzła typu
Element
zwróć wynik lokalizacji prefiksu przestrzeni nazw dla tego węzła z przekazaniem namespace. - Dla węzła typu
Document
zwróć wynik lokalizacji prefiksu przestrzeni nazw dla jego elementu dokumentowego, jeśli nie jest nim wartośćnull
, w przeciwnym razie zwróć wartośćnull
. - Dla węzła typu
DocumentType
iDocumentFragment
zwróć wartośćnull
. - Dla pozostałych węzłów zwróć wynik lokalizacji prefiksu przestrzeni nazw dla ich rodzica elementowego, jeśli nie jest nim wartość
null
, w przeciwnym razie zwróć wartośćnull
.
- Dla węzła typu
Analizując dokładnie wszystkie powiązane z metodą lookupPrefix()
algorytmy można zauważyć, że sprawdzanie prefiksu przestrzeni nazw powiązanego z przekazaną przestrzenią nazw może przechodzić na inne węzły (zawsze są to elementy), wszystko zależy od rodzaju aktualnie weryfikowanego węzła.
Prosty przykład:
<script>
document.write(document.lookupPrefix("")); // null
document.write("<br>");
document.write(document.lookupPrefix(null)); // null
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 prefiks pasujący do przekazanej przestrzeni nazw (który może być odczytywany z rodzica węzła)
document.write(newDiv.lookupPrefix("www.test.pl")); // ns
document.write("<br>");
document.write(newTest.lookupPrefix("www.test.pl")); // null - zgodnie z algorytmem nie powinno być ns?
document.write("<br>");
document.write(newP.lookupPrefix("www.test.pl")); // ns - sprawdzanie przeszło z newP na rodzica newDiv
document.write("<br><br>");
document.write(document.createDocumentFragment().lookupPrefix("")); // null
document.write("<br>");
document.write(document.createDocumentFragment().lookupPrefix(null)); // null
</script>
Na chwilę obecną żadna aktualna przeglądarka nie obsługuje metody lookupPrefix()
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? lookupPrefix(DOMString? namespace); }