NamedNodeMap#

NamedNodeMap.item()#

Metoda item() zwraca atrybut o określonym indeksie z listy atrybutów skojarzonej z daną mapą nazwanych atrybutów. Jeśli w liście atrybutów nie ma atrybutu o danym indeksie to zwrócona zostanie wartość null.

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 attr = namedNodeMap.item(index);
var attr = namedNodeMap[index]; // alternatywa z JS

gdzie poszczególne człony oznaczają:

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

  1. Jeśli index jest równy lub większy od liczby atrybutów w liście atrybutów skojarzonej z obiektem kontekstu, to zwróć wartość null.
  2. Zwróć atrybut z pozycją wskazywaną przez index, który znajduje się w liście atrybutów skojarzonej z obiektem kontekstu.

W przypadku alternatywy z JS dla metody item() mamy do czynienia z pojęciem obsługiwanych indeksów właściwości.

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 getItem(method){

			var p = document.getElementsByTagName("p")[0]; // referencja do akapitu
			p.setAttribute("id", "Identyfikator");
			p.className = "Klasa1 Klasa2 Klasa3";
			var allAttr = p.attributes;

			if (method == 0){
				var attr = allAttr.item(method); // atrybut o indeksie 0
			}

			else if (method == 1){
				var attr = allAttr.item(method); // atrybut o indeksie 1
			}

			else if (method == 2){
				var attr = allAttr[method]; // atrybut o indeksie 0
			}

			else if (method == 3){
				var attr = allAttr[method]; // atrybut o indeksie 1
			}

			else if (method == 10){
				var attr = allAttr.item(method); // atrybut o indeksie 10
			}

			else if (method == 15){
				var attr = allAttr[method]; // atrybut o indeksie 15
			}

			var info = document.getElementById("info");

			info.innerHTML = "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>" + "Indeks w mapie: " + method
						+ "<br>" + "Właściwość name: " + attr.name
						+ "<br>" + "Właściwość value: " + attr.value;

			}

			else{
				info.innerHTML += "<br><br>Wartość: " + String(attr)
						+ "<br>" + "Indeks w mapie: " + method;
			}

		}

	</script>

</head>

<body>
	<p>Akapit z atrybutami ustawianymi z poziomu skryptu:</p>
	<ul>
		<li>p.setAttribute("id", "Identyfikator");</li>
		<li>p.className = "Klasa1 Klasa2 Klasa3";</li>
	</ul>

	<p>Kliknij przycisk by pobrać atrybut o określonym indeksie z listy atrybutów akapitu.</p>
	<input type="button" value="p.attributes.item(0)" onclick="getItem(0)">
	<input type="button" value="p.attributes.item(1)" onclick="getItem(1)">
	<input type="button" value="p.attributes[0]" onclick="getItem(0)">
	<input type="button" value="p.attributes[1]" onclick="getItem(1)">
	<input type="button" value="p.attributes.item(10)" onclick="getItem(10)">
	<input type="button" value="p.attributes[15]" onclick="getItem(15)">

	<p style="color: blue;">Szczegółowe informacje dla pobranych atrybutów:</p>
	<p id="info"></p>
</body>

</html>

W powyższym przykładzie widać wyraźnie, że jest drobna różnica między dwoma analogicznymi (w teorii) sposobami. Metoda item() dla indeksu równego lub większego od wartości atrybutu NamedNodeMap.length zwraca wartość null, kiedy nawiasowe odwołanie [] zwraca wartość undefined. Nie dotyczy przeglądarki IE, która w drugim sposobie błędnie zwraca wartość null.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[LegacyUnenumerableNamedProperties]
interface NamedNodeMap {
	getter Attr? item(unsigned long index);
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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