Element#
Element.setAttributeNS()#
Metoda setAttributeNS()
ustawia lub zmienia wartość z atrybutu o określonej przestrzeni nazw i nazwie kwalifikowanej w danym elemencie.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
element.setAttributeNS(namespace, qualifiedName, value);
gdzie poszczególne człony oznaczają:
- element - węzeł będący obiektem kontekstu.
- namespace - łańcuch znakowy reprezentujący przestrzeń nazw, do której należy ustawiany atrybut w elemencie. Wartość
null
ma identyczne działanie jak przekazanie pustego łańcucha znakowego. - qualifiedName - łańcuch znakowy reprezentujący nazwę kwalifikowaną ustawianego atrybutu w elemencie.
- value - łańcuch znakowy reprezentujący nową wartość ustawianego atrybutu w elemencie.
Algorytm wywołania metody setAttributeNS(namespace, qualifiedName, value)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Niech namespace, prefix oraz localName będą wynikiem przekazania namespace i qualifiedName do weryfikacji i wydobycia. Zrzuć ponownie każdy wyjątek.
- Ustaw wartość atrybutu dla obiektu kontekstu z przekazaniem localName, value, prefix i namespace.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function(){
p = document.getElementsByTagName("p")[0]; // referencja do akapitu
p.setAttributeNS("ns1", "ID", "Test1");
p.setAttribute("id", "Identyfikator");
p.setAttributeNS("ns2", "A:NEW", "Test2");
var info = document.getElementById("info");
}
function listAllAttr(){
var allAttr = p.attributes;
for (var i = 0; i < allAttr.length; i++){
var attr = allAttr[i];
info.innerHTML += "<br>" + attr.namespaceURI + " , " + attr.prefix + " , " + attr.name + " , " + attr.value;
}
}
function setAttrNS(namespace, name, value){
try{
info.innerHTML = "Liczba atrybutów w akapicie (przed ustawieniem): " + p.attributes.length + "<br>";
listAllAttr();
info.innerHTML += "<br><br>" + "Metoda setAttribute('" + namespace + "','" + name + "','" + value + "'): " + p.setAttributeNS(namespace, name, value)
+ "<br><br>" + "Liczba atrybutów w akapicie (po ustawieniu): " + p.attributes.length + "<br>";
listAllAttr();
}
catch(e){
info.innerHTML = "Wyjątek: " + e
+ "<br>" + "Pierwszy argument z metody: " + namespace
+ "<br>" + "Drugi argument z metody: " + name
+ "<br>" + "Drugi argument z metody: " + value;
}
}
</script>
</head>
<body>
<p>Akapit z atrybutami ustawianymi z poziomu skryptu:</p>
<ul>
<li>p.setAttributeNS("ns1", "ID", "Test1");</li>
<li>p.setAttribute("id", "Identyfikator");</li>
<li>p.setAttributeNS("ns2", "A:NEW", "Test2");</li>
</ul>
<p>Kliknij przycisk by ustawić wartość atrybutu o określonej przestrzeni nazw i nazwie lokalnej w akapicie.</p>
<input type="button" value="setAttributeNS('ns1','ID','value1')" onclick="setAttrNS('ns1','ID','value1')">
<input type="button" value="setAttributeNS('','ID','value2')" onclick="setAttrNS('','ID','value2')">
<input type="button" value="setAttributeNS(null,'id','value3')" onclick="setAttrNS(null,'id','value3')">
<input type="button" value="setAttributeNS('','id','value4')" onclick="setAttrNS('','id','value4')">
<input type="button" value="setAttributeNS('ns2','NEW','value5')" onclick="setAttrNS('ns2','NEW','value5')">
<input type="button" value="setAttributeNS('ns2','new','value6')" onclick="setAttrNS('ns2','new','value6')">
<input type="button" value="setAttributeNS('ns2','A:NEW','value7')" onclick="setAttrNS('ns2','A:NEW','value7')">
<input type="button" value="setAttributeNS('','!','value8')" onclick="setAttrNS('','!','value8')">
<p style="color: blue;">Szczegółowe informacje dla polecenia:</p>
<span id="info"></span>
</body>
</html>
Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują metodę setAttributeNS()
zgodnie z najnowszymi wymaganiami specyfikacji DOM4. IE wiele aspektów związanych z atrybutami obsługuje błędnie.
Składnia Web IDL#
interface Element : Node { void setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value); }
Specyfikacje i inne materiały#
Pasek społecznościowy