Element#
Element.hasAttribute()#
Metoda hasAttribute()
zwraca boolowską wartość true
jeśli atrybut o określonej nazwie kwalifikowanej 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.hasAttribute(qualifiedName);
gdzie poszczególne człony oznaczają:
- boolean - boolowskie
true
lubfalse
. - element - węzeł będący obiektem kontekstu.
- qualifiedName - łańcuch znakowy reprezentujący nazwę kwalifikowaną poszukiwanego atrybutu w elemencie.
Algorytm wywołania metody hasAttribute(qualifiedName)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Jeśli obiekt kontekstu znajduje się w przestrzeni nazw HTML oraz jego właścicielem jest dokument HTML, to niech qualifiedName zostanie przekonwertowana na małe znaki ASCII.
- Zwróć boolowską wartość
true
jeśli obiekt kontekstu ma jakiś atrybut, którego nazwą kwalifikowaną jest qualifiedName, w przeciwnym razie zwróć boolowską wartośćfalse
.
Alternatywnie można skorzystać z podobnie działających metod Element.getAttribute()
, Element.getAttributeNode()
lub NamedNodeMap.getNamedItem()
w połączeniu z kilkoma dodatkowymi linijkami kodu.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
function getNamedItem(name){
var p = document.getElementsByTagName("p")[0]; // referencja do akapitu
p.setAttributeNS("www.test1.com", "ID", "Test1");
p.setAttributeNS("www.test2.com", "Class", "Test2");
p.setAttribute("id", "Identyfikator");
p.className = "Klasa1 Klasa2 Klasa3";
p.setAttributeNS("www.test3.com", "A:NEW", "Test3");
p.setAttributeNS("www.test4.com", "a:new", "Test4");
var allAttr = p.attributes;
var attr = allAttr.getNamedItem(name); // atrybut o określonej nazwie
var info = document.getElementById("info");
info.innerHTML = "Metoda getAttribute('" + name + "'): " + p.getAttribute(name)
+ "<br>" + "Metoda hasAttribute('" + name + "'): " + p.hasAttribute(name);
info.innerHTML += "<br><br>" + "Porównanie z metodą getNamedItem('" + name + "'): "
+ "<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>" + "Argument z metody: " + name
+ "<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>" + "Argument z metody: " + name;
}
}
</script>
</head>
<body>
<p>Akapit z atrybutami ustawianymi z poziomu skryptu:</p>
<ul>
<li>p.setAttributeNS("www.test1.com", "ID", "Test1");</li>
<li>p.setAttributeNS("www.test2.com", "Class", "Test2");</li>
<li>p.setAttribute("id", "Identyfikator");</li>
<li>p.className = "Klasa1 Klasa2 Klasa3";</li>
<li>p.setAttributeNS("www.test3.com", "A:NEW", "Test3");</li>
<li>p.setAttributeNS("www.test4.com", "a:new", "Test4");</li>
</ul>
<p>Kliknij przycisk by pobrać wartość atrybutu o określonej nazwie z akapitu.</p>
<input type="button" value="hasAttribute('ID')" onclick="getNamedItem('ID')">
<input type="button" value="hasAttribute('id')" onclick="getNamedItem('id')">
<input type="button" value="hasAttribute('Class')" onclick="getNamedItem('Class')">
<input type="button" value="hasAttribute('class')" onclick="getNamedItem('class')">
<input type="button" value="hasAttribute('A:NEW')" onclick="getNamedItem('A:NEW')">
<input type="button" value="hasAttribute('a:new')" onclick="getNamedItem('a:new')">
<input type="button" value="hasAttribute('brak')" onclick="getNamedItem('brak')">
<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ę hasAttribute()
zgodnie z najnowszymi wymaganiami specyfikacji DOM4. IE uwzględnia atrybuty bez zwracania uwagi na wielkość znaków w ich nazwie kwalifikowanej.
Składnia Web IDL#
interface Element : Node { boolean hasAttribute(DOMString qualifiedName); }