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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var boolean = element.hasAttribute(qualifiedName);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody hasAttribute(qualifiedName) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. 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.
  2. 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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!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#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Element : Node {
	boolean hasAttribute(DOMString qualifiedName);
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Element (H1) Element.hasAttribute() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)