Document (rozszerzenie)#

document.getElementsByName()#

Metoda getElementsByName() zwraca kolekcję typu NodeList, która zawiera wszystkich potomków typu Element (zgodnie z porządkiem drzewa) znajdujących się w drzewie dokumentu, i mających określoną wartość atrybutu name. W przypadku braku pasujących elementów zwrócona zostanie pusta kolekcja.

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.getElementsByName(name);

gdzie poszczególne człony oznaczają:

Wielkość znaków w wartości atrybutu name oraz w argumencie przekazanym do metody ma znaczenie w dokumentach (X)HTML. Wielkość znaków w nazwie samego atrybutu jest nieistotna tylko w przypadku dokumentów HTML, czyli przykładowo nazwy name lub NAME wskazują na ten sam atrybut.

Metoda ma zastosowanie jedynie w przypadku dokumentów (X)HTML. Zwraca wszystkie elementy z określoną wartością atrybutu name. Dotyczy to także elementów z podanym atrybutem name, które w rzeczywistości nie obsługują go wcale (np. zgodnie ze specyfikacją HTML5). Takie zachowanie występuje w przeglądarkach Firefox, Chrome oraz Opera, ale nie w IE9.

Po kolejnym wywołaniu metody z tym samym argumentem, może zostać zwrócony ten sam obiekt NodeList, który utworzony i zwrócony został we wcześniejszym wywołaniu metody.

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 getCollectionName(){

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

			var allName = document.getElementsByName("test"); // pobranie kolekcji ze wszystkimi elementami z nazwą "test"
			var allNameLen = allName.length;

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

			var result = "Interfejs kolekcji: " + allName // [object NodeList]
				+ "<br>" + "Liczba węzłów: " + allName.length; // 3

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

				if (allName[i].textContent != ""){
					result += "<br>" + allName[i].textContent;
				}
				else{
					result += "<br>" + allName[i].value;
				}

			}

			info.innerHTML = result;

		}

	</script>

</head>

<body>
	<p name="test">Pierwszy akapit (name="test").</p>
	<p name="test">Drugi akapit (name="test").</p>
	<p name="Test">Trzeci akapit (name="Test").</p>
	<p id="test">Czwarty akapit (id="test").</p>
	<input name="test" type="button" value="Pierwszy przycisk (name='test')">
	<input name="Test" type="button" value="Drugi przycisk (name='Test')">
	<input id="test" type="button" value="Trzeci przycisk (id='test')">

	<p>Kliknij przycisk <input type="button" value="getElementsByName('test')" onclick="getCollectionName()"> by pobrać wszystkie elementy o określonej nazwie w dokumencie.</p>
	<p style="color: blue;">Szczegółowe informacje dla pobranej kolekcji:</p>
	<p id="info"></p>
</body>

</html>

Metoda getElementsByName() jest obsługiwana spójnie przez wszystkie wiodące przeglądarki, takie jak Firefox, Chrome czy Opera. Oczywiście nie mogło obyć się bez różnic w produkcie Microsoftu. W przypadku IE9 metoda traktuje atrybuty id oraz name identycznie, nie rozróżnia przy tym wielkości znaków w wartościach tych atrybutów, zwraca kolekcje typu HTMLCollection, w końcu pomija wszystkie elementy, w których podanie atrybutu name nie zostało zdefiniowane w HTML5.

Interfejs Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
NodeList getElementsByName(DOMString elementName);

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Document (rozszerzenie) (H1) document.getElementsByName() (H2) Interfejs Web IDL (H3) Specyfikacje i inne materiały (H3)