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ść
nulllub 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
Elementzwróć wynik lokalizacji prefiksu przestrzeni nazw dla tego węzła z przekazaniem namespace. - Dla węzła typu
Documentzwróć 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
DocumentTypeiDocumentFragmentzwróć 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); }