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:

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

gdzie poszczególne człony oznaczają:

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

  1. Jeśli namespace jest pustym łańcuchem znakowym, to ustaw ją na wartość null.
  2. 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:

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

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

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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