Element#
Element.removeAttributeNS()#
Metoda removeAttributeNS()
usuwa atrybutu o określonej przestrzeni nazw i nazwie lokalnej w danym elemencie.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
element.removeAttributeNS(namespace, localName);
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 usuwany atrybut w elemencie. Wartość
null
ma identyczne działanie jak przekazanie pustego łańcucha znakowego. - localName - łańcuch znakowy reprezentujący nazwę lokalną usuwanego atrybutu w elemencie.
Algorytm wywołania metody removeAttributeNS(namespace, localName)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Usuń atrybut poprzez przestrzeń nazw i nazwę lokalną z przekazaniem namespace, localName i obiektu kontekstu, a następnie zwróć wartość
undefined
.
Alternatywnie można skorzystać z podobnie działającej metody NamedNodeMap.removeNamedItemNS()
. Trzeba jedynie pamiętać o możliwości zrzucenia przez nią błędu oraz o zwracaniu referencji do usuniętego atrybutu.
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 delAttr(namespace, localName){
info.innerHTML = "Liczba atrybutów w akapicie (przed usunięciem): " + p.attributes.length + "<br>";
listAllAttr();
info.innerHTML += "<br><br>" + "Metoda removeAttributeNS('" + namespace + "','" + localName + "'): " + p.removeAttributeNS(namespace, localName)
+ "<br><br>" + "Liczba atrybutów w akapicie (po usunięciu): " + p.attributes.length + "<br>";
listAllAttr();
}
</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 usunąć atrybut o określonej przestrzeni nazw i nazwie lokalnej z akapitu.</p>
<input type="button" value="removeAttribute('ns1','ID')" onclick="delAttr('ns1','ID')">
<input type="button" value="removeAttribute('','ID')" onclick="delAttr('','ID')">
<input type="button" value="removeAttribute(null,'id')" onclick="delAttr(null,'id')">
<input type="button" value="removeAttribute('','id')" onclick="delAttr('','id')">
<input type="button" value="removeAttribute('ns2','NEW')" onclick="delAttr('ns2','NEW')">
<input type="button" value="removeAttribute('ns2','new')" onclick="delAttr('ns2','new')">
<input type="button" value="removeAttribute('ns2','A:NEW')" onclick="delAttr('ns2','A:NEW')">
<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ę removeAttributeNS()
zgodnie z najnowszymi wymaganiami specyfikacji DOM4. IE uwzględnia atrybuty bez zwracania uwagi na wielkość znaków w ich nazwie lokalnej.
Składnia Web IDL#
interface Element : Node { void removeAttributeNS(DOMString? namespace, DOMString localName); }