Element#
Element.attributes#
Właściwość attributes
zwraca mapę nazwanych atrybutów, która odpowiada uporządkowanej liście atrybutów w danym elemencie. Jeśli element nie posiada żadnych atrybutów to mamy do czynienia z pustą mapą nazwanych atrybutów. 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 map = element.attributes;
gdzie poszczególne człony oznaczają:
- map - mapa nazwanych atrybutów ze wszystkimi atrybutami w elemencie.
- element - węzeł będący obiektem kontekstu.
Elementami (nie mylić z węzłami elementowymi) w mapie nazwanych atrybutów są atrybuty, czyli obiekty implementujące interfejs Attr, które najprościej wydobyć za pomocą indeksowego odwołania:
var attr = element.attributes[index];
gdzie poszczególne człony oznaczają:
- attr - obiekt reprezentujący konkretny atrybut w mapie nazwanych atrybutów.
- element - węzeł będący obiektem kontekstu.
- index - liczba całkowita reprezentująca pozycję konkretnego atrybutu w mapie nazwanych atrybutów.
Więcej szczegółów związanych z elementami, ich potencjalnymi atrybutami oraz spoiwem w postaci mapy nazwanych atrybutów umieściłem w zbiorczym dziale "Podstawy - Elementy i atrybuty".
Prosty przykład:
<script>
var html = document.documentElement; // referencja do elementu HTML
html.setAttributeNS("www.test.com", "p:AAA", "Test"); // ustawiamy nowy atrybut
var attr = html.attributes; // pobieramy listę atrybutów
document.write("Ustawiamy własny atrybut dla elementu HTML:");
document.write("<br>");
document.write("html.setAttributeNS('www.test.com', 'p:AAA', 'Test');");
document.write("<br><br>");
document.write("Pobieramy listę atrybutów elementu HTML:");
document.write("<br>");
document.write("var attr = html.attributes: " + attr); // [object NamedNodeMap]
document.write("<br>");
document.write("attr.length: " + attr.length); // 1
document.write("<br><br>");
document.write("Odczytujemy wartość pierwszego atrybutu z listy:");
document.write("<br>");
document.write("attr[0].value: " + attr[0].value); // Test
document.write("<br><br>");
document.write("Dodajemy nowy atrybut i odczytujemy dane z utworzonej wcześniej listy atrybutów:");
document.write("<br>");
document.write("html.id = 'Nowa wartość';");
html.id = 'Nowa wartość';
document.write("<br>");
document.write("attr: " + attr); // [object NamedNodeMap]
document.write("<br>");
document.write("attr.length: " + attr.length); // 2
document.write("<br>");
document.write("attr[1].value: " + attr[1].value); // Nowa wartość
document.write("<br><br>");
document.write(document.attributes); // undefined (Firefox, Chrome), null (pozostałe przeglądarki) - błędne działanie
</script>
Właściwość attributes
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ść attributes
zgodnie z najnowszymi wymaganiami specyfikacji DOM4, pozostałe programy implementują wcześniejsze wytyczne (szczegóły).
Składnia Web IDL#
interface Element : Node { [SameObject] readonly attribute NamedNodeMap attributes; }