Element#
Element.namespaceURI#
Właściwość namespaceURI
zwraca przestrzeń nazw dla danego elementu. Jeśli element nie posiada przestrzeni nazw to zwrócona zostanie wartość null
. Właściwość jest tylko do odczytu.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var namespace = element.namespaceURI;
gdzie poszczególne człony oznaczają:
- namespace - łańcuch znakowy reprezentujący przestrzeń nazw elementu lub wartość
null
. - element - węzeł będący obiektem kontekstu.
Wartość zwracana przez właściwość namespaceURI
nie musi być identyczna z wartościami zwracanymi przez polecenia Node.isDefaultNamespace()
lub Node.lookupNamespaceURI()
. Wspomniane metody lokalizują przestrzeń nazw w całym zasięgu przestrzeni nazw, czyli mogą przechodzić do przodków danego elementu. Wartość dla właściwości namespaceURI
ustalana jest od razu przy tworzeniu elementu, np. automatycznie w czasie wczytywania dokumentu przez przeglądarkę lub przez nas samych za pomocą metody Document.createElementNS()
.
W związku z powyższym przenoszenie elementów między dokumentami w żadnym wypadku nie wpływa na zmianę przypisanej przestrzeni nazw czy prefiksu przestrzeni nazw. Manipulowanie przestrzeniami nazw w elementach, po ich utworzeniu, nie jest możliwe.
Prosty przykład:
<script>
var html = document.documentElement; // referencja do elementu HTML
document.write(html); // [object HTMLHtmlElement]
document.write("<br><br>");
document.write(html.namespaceURI); // http://www.w3.org/1999/xhtml
document.write("<br>");
document.write(document.createElementNS("", "p").namespaceURI); // null
document.write("<br><br>");
document.write(document.namespaceURI); // undefined (Firefox, Chrome), null (pozostałe przeglądarki) - błędne działanie
document.write("<br>");
document.write(Element.prototype.hasOwnProperty("namespaceURI")); // true
document.write("<br>");
document.write(html.__proto__.__proto__.__proto__.hasOwnProperty("namespaceURI")); // true
document.write("<br>");
document.write(html.__proto__.__proto__.__proto__); // [object ElementPrototype]
</script>
Właściwość namespaceURI
dla węzła typu Element
pojawia się dopiero w specyfikacji DOM4. W starszych wersjach DOM właściwość była definiowana dla dowolnego węzła, ale obecnie została całkowicie usunięta z interfejsu Node.
Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują właściwość namespaceURI
zgodnie z najnowszymi wymaganiami specyfikacji DOM4, pozostałe programy implementują wcześniejsze wytyczne (szczegóły).
Składnia Web IDL#
interface Element : Node { readonly attribute DOMString? namespaceURI; }