Element#
Element.getAttributeNames()#
Metoda getAttributeNames()
zwraca sekwencję zawierającą nazwy kwalifikowane ze wszystkich atrybutów w danym elemencie. Jeśli element nie posiada żadnego atrybutu to zwrócona zostanie pusta sekwencja.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var attr_names = element.getAttributeNames();
gdzie poszczególne człony oznaczają:
- attr_names - sekwencja z łańcuchami znakowymi reprezentującymi nazwy kwalifikowane ze wszystkich atrybutów w elemencie. W przypadku JS odpowiednikiem sekwencja jest tablica.
- element - węzeł będący obiektem kontekstu.
Algorytm wywołania metody getAttributeNames()
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Zwróć nazwy kwalifikowane wszystkich atrybutów, zgodnie z kolejnością, znajdujących się w liście atrybutów skojarzonej z obiektem kontekstu, jeśli takowe istnieją, w przeciwnym razie zwróć pustą sekwencję.
Metoda getAttributeNames()
w żaden sposób nie gwarantuje, że otrzymamy sekwencję z niepowtarzającymi się wartościami. Duplikaty mogą występować w sytuacji, kiedy operujemy na atrybutach o tej samej nazwie kwalifikowanej, ale z inną przestrzenią nazw.
Prosty przykład:
<!DOCTYPE html>
<html>
<p>Pierwszy testowy akapit bez żadnych atrybutów.</p>
<p>Drugi testowy akapit z atrybutami ustawianymi z poziomu skryptu:</p>
<ul>
<li>p.setAttributeNS("ns1", "a:test", "");</li>
<li>p.setAttributeNS("ns1", "A:Test", "");</li>
<li>p.setAttributeNS("ns1", "A:TEST", "");</li>
<li>p.setAttributeNS("ns2", "a:test", "");</li>
<li>p.setAttributeNS("ns2", "A:Test", "");</li>
<li>p.setAttributeNS("ns2", "A:TEST", "");</li>
<li>p.setAttributeNS("", "test2", "");</li>
<li>p.setAttributeNS("", "Test2", "");</li>
<li>p.setAttributeNS("", "TEST2", "");</li>
</ul>
<p style="color: blue;">Szczegółowe informacje dla poszczególnych akapitów:</p>
<p id="info"></p>
<script>
function getInfoAttNames(desc, whatElement){
var sequence = whatElement.getAttributeNames();
info.innerHTML += desc
+ "<br>" + "sequence: " + sequence
+ "<br>" + "sequence.toString(): " + sequence.toString()
+ "<br>" + "typeof sequence: " + typeof sequence
+ "<br>" + "sequence.constructor: " + sequence.constructor
+ "<br>" + "sequence.length: " + sequence.length
+ "<br>" + "element.attributes.length: " + whatElement.attributes.length + "<br><br>";
}
var info = document.getElementById("info");
var allP = document.getElementsByTagName("p");
var p1 = allP[0];
var p2 = allP[1];
p2.setAttributeNS("ns1", "a:test", "");
p2.setAttributeNS("ns1", "A:Test", "");
p2.setAttributeNS("ns1", "A:TEST", "");
p2.setAttributeNS("ns2", "a:test", "");
p2.setAttributeNS("ns2", "A:Test", "");
p2.setAttributeNS("ns2", "A:TEST", "");
p2.setAttributeNS("", "test2", "");
p2.setAttributeNS("", "Test2", "");
p2.setAttributeNS("", "TEST2", "");
getInfoAttNames("Sekwencji z pierwszego testowego akapitu:", p1);
getInfoAttNames("Sekwencji z drugiego testowego akapitu:", p2);
</script>
</html>
Na chwilę obecną jedynie przeglądarka Firefox zaimplementowała metodę getAttributeNames()
.
Metoda getAttributeNames()
pojawia się dopiero w specyfikacji DOM4.
Składnia Web IDL#
interface Element : Node { sequence<DOMString> getAttributeNames(); }