Document#

Document.getElementsByTagName()#

Metoda getElementsByTagName() zwraca kolekcję typu HTMLCollection ze wszystkimi potomkami typu Element o określonej nazwie kwalifikowanej, którzy znajdują się w danym dokumencie (zgodnie z porządkiem drzewa). W przypadku braku pasujących elementów zwrócona zostanie pusta kolekcja.

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 elements = document.getElementsByTagName(qualifiedName);

gdzie poszczególne człony oznaczają:

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

  1. Zwróć listę elementów z nazwą kwalifikowaną qualifiedName dla obiektu kontekstu.

Wielkość znaków w nazwie kwalifikowanej przeszukiwanych elementów oraz w argumencie przekazanym do metody ma znaczenie w przypadku dokumentów XML, natomiast dla dokumentów HTML jest najczęściej nieistotna, chociaż może mieć znaczenie w pewnych specyficznych okolicznościach. Przykładowo polecenie document.getElementsByTagName("FOO") wywołane na dokumencie HTML pasuje do elementów <FOO> w przestrzeni nazw innej niż przestrzeń nazw HTML, do elementów <foo> w przestrzeni nazw HTML, ale nie do elementów <FOO> w przestrzeni nazw HTML.

We wszystkich wcześniejszych specyfikacjach DOM metoda getElementsByTagName() zawsze operowała na nazwie kwalifikowanej w elementach. Było to respektowane przez przeglądarki Firefox i IE (do wersji 11), ale nie przez Operę, tych opartych na Webkicie (np. Chrome czy Safari), a nawet późniejszym Edge. W pewnym momencie (tj. 6 września 2010 roku) zmieniono zachowanie metody w nowym DOM4 tak, żeby traktowała przekazany argument jak nazwę lokalną. W Firefoksie dopiero w 2016 roku próbowano nanieść odpowiednie korekty (Mozilla - Bug 492933), ale szybko okazało się, że jest to niekompatybilne z istniejącymi treściami (głównie ze stroną konfiguracyjną drukarek HP) i zmiany cofnięto. Również w bieżącej wersji specyfikacji DOM powrócono do pierwotnych założeń z poprzednich specyfikacjach DOM (DOM - Bug 143).

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 getCollectionTagName(whatTagName){

			var newP = document.createElement("p"); // nie został dołączony do drzewa dokumentu dlatego zostanie pominięty
			newP.textContent = "Nowy akapit poza drzewem dokumentu.";
			var newDiv = document.createElement("div"); // nie został dołączony do drzewa dokumentu dlatego zostanie pominięty
			newDiv.textContent = "Nowy kontener poza drzewem dokumentu.";

			var body = document.getElementsByTagName("body")[0]; // referencja do elementu BODY

			if (body.firstChild.prefix == null){
				var newP2 = document.createElementNS("ns", "test:p");
				newP2.textContent = "Nowy akapit 'test:p' bez przestrzeni nazw utworzony i dodany z poziomu skryptu.";
				body.insertBefore(newP2, body.firstChild);
				var newP3 = document.createElementNS("http://www.w3.org/1999/xhtml", "test:p");
				newP3.textContent = "Nowy akapit 'test:p' z przestrzenią nazw HTML utworzony i dodany z poziomu skryptu.";
				body.insertBefore(newP3, body.firstChild);
			}

			var allElement = document.getElementsByTagName(whatTagName); // pobranie kolekcji ze wszystkimi elementami
			var allElementLen = allElement.length;

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

			var result = "Interfejs kolekcji: " + allElement // [object HTMLCollection], Opera i Chrome [object NodeList]
				+ "<br>" + "Liczba węzłów: " + allElement.length;

			for(var i = 0; i < allElementLen; i++){

				var el = allElement[i];

				result += "<br><br>" + "Pobrany akapit: " + el.textContent
					+ "<br>" + "Właściwość prefix: " + el.prefix
					+ "<br>" + "Właściwość localName: " + el.localName
					+ "<br>" + "Właściwość nodeName: " + el.nodeName
					+ "<br>" + "Właściwość tagName: " + el.tagName
					+ "<br>" + "Właściwość namespaceURI: " + el.namespaceURI;

			}

			info.innerHTML = result;

		}

	</script>

</head>

<body>
	<p>Pierwszy akapit.</p>
	<P>Drugi akapit.</p>
	<P>Trzeci akapit.</P>

	<p>Kliknij przycisk <input type="button" value="getElementsByTagName('p')" onclick="getCollectionTagName('p')"> by pobrać wszystkie akapity p w dokumencie (Czwarty akapit).</p>
	<p>Kliknij przycisk <input type="button" value="getElementsByTagName('P')" onclick="getCollectionTagName('P')"> by pobrać wszystkie akapity P w dokumencie (Piąty akapit).</p>
	<p>Kliknij przycisk <input type="button" value="getElementsByTagName('test:p')" onclick="getCollectionTagName('test:p')"> by pobrać wszystkie akapity test:p w dokumencie (Szósty akapit).</p>
	<p>Kliknij przycisk <input type="button" value="getElementsByTagName('TEST:P')" onclick="getCollectionTagName('TEST:P')"> by pobrać wszystkie akapity TEST:P w dokumencie (Siódmy akapit).</p>
	<p>Kliknij przycisk <input type="button" value="getElementsByTagName('div')" onclick="getCollectionTagName('div')"> by pobrać wszystkie kontenery w dokumencie (Ósmy akapit).</p>

	<p style="color: blue;">Szczegółowe informacje dla pobranej kolekcji (Dziewiąty akapit):</p>
	<span id="info"></span>
</body>

</html>

Metoda getElementsByTagName() została zdefiniowana także w interfejsie Element, dlatego może być bezproblemowo wywoływana na węzłach typu Element.

Składnia Web IDL#

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

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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