NamedNodeMap#

NamedNodeMap.getNamedItem()#

Metoda getNamedItem() zwraca pierwszy atrybut o określonej nazwie kwalifikowanej z listy atrybutów skojarzonej z daną mapą nazwanych atrybutów. Jeśli w liście atrybutów nie ma atrybutu o danej nazwie kwalifikowanej 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.getNamedItem(qualifiedName);
var attr = namedNodeMap[qualifiedName]; // alternatywa z JS
var attr = namedNodeMap.qualifiedName; // alternatywa z JS

gdzie poszczególne człony oznaczają:

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

  1. Zwróć wynik pobrania atrybutu poprzez nazwę z przekazaniem qualifiedName i elementu skojarzonego z obiektem kontekstu.

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

Alternatywnie można skorzystać z identycznie działającej metody Element.getAttributeNode().

#W przeglądarkach zgodnych z najnowszymi wymaganiami specyfikacji DOM4 wszystkie indeksy nazwane w mapie nazwanych atrybutów, które są reprezentowane przez nazwy kwalifikowane w atrybutach, powinny zostać pominięte przy wyliczaniu. W definicji Web IDL jest to sygnalizowane poprzez zastosowanie atrybutu rozszerzającego [LegacyUnenumerableNamedProperties]. Aktualnie jest to spełnione przez wszystkie wiodące przeglądarki, co można zaobserwować uruchamiając poniższy przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>

<head>

	<script>

		window.onload = function(){

			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 info = document.getElementById("info");

			for (var prop in allAttr) {

				info.innerHTML += prop + "<br>"; // zwracamy wszystkie wyliczalne właściwości z mapy nazwanych atrybutów

			}

		}

	</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 id="info"></p>
</body>

</html>

Kolejny 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 = "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ć atrybut o określonej nazwie z listy atrybutów akapitu.</p>
	<input type="button" value="getNamedItem('ID')" onclick="getNamedItem('ID')">
	<input type="button" value="getNamedItem('id')" onclick="getNamedItem('id')">
	<input type="button" value="getNamedItem('Class')" onclick="getNamedItem('Class')">
	<input type="button" value="getNamedItem('class')" onclick="getNamedItem('class')">
	<input type="button" value="getNamedItem('A:NEW')" onclick="getNamedItem('A:NEW')">
	<input type="button" value="getNamedItem('a:new')" onclick="getNamedItem('a:new')">
	<input type="button" value="getNamedItem('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ądarka Firefox obsługuje metodę getNamedItem() zgodnie z najnowszymi wymaganiami specyfikacji DOM4. Chrome niewłaściwie obsługuje algorytm pobrania atrybutu poprzez nazwę (krok pierwszy), ponieważ dla elementów z przestrzenią nazw HTML i z właścicielem będącym dokumentem HTML nie zamienia przekazanej nazwy kwalifikowanej do metody na małe litery. IE niepotrzebnie zamienia na małe znaki nazwę kwalifikowaną w liście atrybutów przy przeszukiwaniu i dopasowywaniu. Wszystkie rozbieżności prowadzą do zwracania przez te przeglądarki niewłaściwych wartości atrybutów (jak w powyższym przykładzie).

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? getNamedItem(DOMString qualifiedName);
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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