Element#
Element.hasAttributeNS()#
Metoda hasAttributeNS()
zwraca boolowską wartość true
jeśli atrybut o określonej przestrzeni nazw i nazwie lokalnej występuje w danym elemencie, w przeciwnym razie zwrócona zostanie wartość false
.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var boolean = element.hasAttributeNS(namespace, localName);
gdzie poszczególne człony oznaczają:
- boolean - boolowskie
true
lubfalse
. - element - węzeł będący obiektem kontekstu.
- namespace - łańcuch znakowy reprezentujący przestrzeń nazw, do której należy poszukiwany atrybut w elemencie. Wartość
null
ma identyczne działanie jak przekazanie pustego łańcucha znakowego. - localName - łańcuch znakowy reprezentujący nazwę lokalną poszukiwanego atrybutu w elemencie.
Algorytm wywołania metody hasAttributeNS(namespace, localName)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Jeśli namespace jest pustym łańcuchem znakowym, to ustaw ją na wartość
null
. - Zwróć boolowską wartość
true
jeśli obiekt kontekstu ma jakiś atrybut, którego przestrzenią nazw jest namespace i nazwą lokalną jest localName, w przeciwnym razie zwróć boolowską wartośćfalse
.
Alternatywnie można skorzystać z podobnie działających metod Element.getAttributeNS()
, Element.getAttributeNodeNS()
lub NamedNodeMap.getNamedItemNS()
w połączeniu z kilkoma dodatkowymi linijkami kodu.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
function getNamedItemNS(namespace, localName){
var p = document.getElementsByTagName("p")[0]; // referencja do akapitu
p.setAttributeNS("ns1", "ID", "Test1");
p.setAttribute("id", "Identyfikator");
p.setAttributeNS("ns2", "A:NEW", "Test2");
var allAttr = p.attributes;
var attr = allAttr.getNamedItemNS(namespace, localName); // atrybut o określonej przestrzeni nazw i nazwie lokalnej
var info = document.getElementById("info");
info.innerHTML = "Metoda getAttributeNS('" + namespace + "','" + localName + "'): " + p.getAttributeNS(namespace, localName)
+ "<br>" + "Metoda hasAttributeNS('" + namespace + "','" + localName + "'): " + p.hasAttributeNS(namespace, localName)
info.innerHTML += "<br><br>" + "Porównanie z metodą getNamedItemNS('" + namespace + "," + localName + "'): "
+ "<br><br>" + "Interfejs mapy nazwanych atrybutów: " + allAttr // [object NamedNodeMap]
+ "<br>" + "Właściwość length: " + allAttr.length;
if (attr){
info.innerHTML += "<br><br>" + "Interfejs atrybutu: " + attr
+ "<br>" + "Pierwszy argument z metody: " + namespace
+ "<br>" + "Drugi argument z metody: " + localName
+ "<br>" + "Właściwość namespaceURI: " + attr.namespaceURI
+ "<br>" + "Właściwość prefix: " + attr.prefix
+ "<br>" + "Właściwość localName: " + attr.localName
+ "<br>" + "Właściwość name: " + attr.name
+ "<br>" + "Właściwość value: " + attr.value;
}
else{
info.innerHTML += "<br><br>Wartość: " + String(attr)
+ "<br>" + "Pierwszy argument z metody: " + namespace
+ "<br>" + "Drugi argument z metody: " + localName;
}
}
</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 pobrać wartość atrybutu o określonej przestrzeni nazw i nazwie lokalnej z akapitu.</p>
<input type="button" value="hasAttributeNS('ns1','ID')" onclick="getNamedItemNS('ns1','ID')">
<input type="button" value="hasAttributeNS('','ID')" onclick="getNamedItemNS('','ID')">
<input type="button" value="hasAttributeNS(null,'id')" onclick="getNamedItemNS(null,'id')">
<input type="button" value="hasAttributeNS('','id')" onclick="getNamedItemNS('','id')">
<input type="button" value="hasAttributeNS('ns2','NEW')" onclick="getNamedItemNS('ns2','NEW')">
<input type="button" value="hasAttributeNS('ns2','new')" onclick="getNamedItemNS('ns2','new')">
<input type="button" value="hasAttributeNS('ns2','A:NEW')" onclick="getNamedItemNS('ns2','A:NEW')">
<p style="color: blue;">Szczegółowe informacje dla pobranych atrybutów:</p>
<p id="info"></p>
</body>
</html>
Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują metodę hasAttributeNS()
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 { boolean hasAttributeNS(DOMString? namespace, DOMString localName); }