Element#

Element.classList#

Właściwość classList zwraca zestaw słów DOM skojarzony z danym elementem, który reprezentuje jego klasy (zgodnie z atrybutem class) lub ustawia w postaci łańcucha znakowego nowe klasy. Jeśli element nie posiada żadnych klas to mamy do czynienia z pustym zestawem słów DOM. Właściwość jest tylko do odczytu.

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 classes = element.classList;// getting
element.classList = new_classes; // setting

gdzie poszczególne człony oznaczają:

Obiekt zwracany przez właściwość classList implementuje interfejs DOMTokenList, dlatego będzie posiadał specyficzne polecenia z tego interfejsu. Dzięki nim manipulowanie poszczególnymi klasami w elemencue jest znacznie wygodniejsze, niż wykorzystanie w tym celu właściwości Element.className operującej jedynie na tekście.

Elementami (nie mylić z węzłami elementowymi) w zestawie słów DOM są łańcuchy znakowe (tzw. unikatowe słowa) reprezentujące poszczególne klasy danego elementu, które najprościej wydobyć za pomocą indeksowego odwołania:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var class = element.classList[index];

gdzie poszczególne człony oznaczają:

Ustawianie nowej wartości poprzez właściwość classList polega na zasadzie automatycznego przekierowania na inną właściwość DOMTokenList.value. W przypadku właściwości classList zachowanie to jest nowością wynikającą z konsolidacji dwóch interfejsów operujących na zestawach i pozostawieniu przy życiu tylko jednego z nich. Dzięki temu można całkowicie zrezygnować ze stosowania właściwości Element.className.

Więcej szczegółów związanych z elementami, ich potencjalnymi atrybutami oraz spoiwem w postaci mapy nazwanych atrybutów umieściłem w zbiorczym dziale "Podstawy - Elementy i atrybuty" oraz w odrębnym dziale "Podstawy - Zestawy".

Prosty przykład:

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

	function showTokens(set){
		return Array.prototype.slice.call(set).join(" ");
	}

	var html = document.documentElement; // referencja do elementu HTML

	document.write(html.classList.constructor); // function DOMTokenList() { [native code] }
	document.write("<br>");
	document.write(typeof html.classList); // object
	document.write("<br>");
	document.write(html.classList.add); // function add() { [native code] }
	document.write("<br>");
	document.write(showTokens(html.classList)); // "" - pusty łańcuch znakowy
	document.write("<br>");
	document.write(html.classList.length); // 0

	document.write("<br><br>");

	html.className = "Test1 Test2 Test3"; // ustawiamy wartość atrybutu class

	document.write(showTokens(html.classList)); // Test1 Test2 Test3
	document.write("<br>");
	document.write(html.classList.length); // 3
	document.write("<br>");
	document.write(html.classList[0]); // Test1
	document.write("<br>");
	document.write(html.classList[1]); // Test2
	document.write("<br>");
	document.write(html.classList[2]); // Test3
	document.write("<br>");
	document.write(typeof html.classList[0]); // string

	document.write("<br><br>");

	html.classList = "Test4"; // ustawiamy wartość atrybutu class przez zestaw (tylko Firefox i Chrome)

	document.write(showTokens(html.classList)); // Test4
	document.write("<br>");
	document.write(html.classList.length); // 1
	document.write("<br>");
	document.write(html.classList[0]); // Test4

	document.write("<br><br>");

	(function(){


		"use strict";

		try{
			html.classList = "Test4"; // ustawiamy wartość atrybutu class przez zestaw (tylko Firefox i Chrome)
			if (html.classList == "Test4"){
				document.write("Przypisanie nowej wartości do właściwości classList działa bez problemu.");
			}
			else{
				document.write("Przypisanie nowej wartości do właściwości classList nie działa prawidłowo.");
			}
		}
		catch(e){
			document.write("W trybie ścisłym przypisanie nowej wartości do właściwości classList zrzuca błąd:");
			document.write("<br>");
			document.write(e); // opis zależny od przeglądarki
			document.write("<br>");
			document.write(e.constructor); // function TypeError() { [native code] }
		}

	}());

</script>

Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują właściwość classList zgodnie z najnowszymi wymaganiami specyfikacji DOM4, gdyż faktycznie zezwalają na ustawianie nowej wartości bezpośrednio przez samą właściwość. Trzeba o tym pamiętać w przypadku starszych przeglądarek i zastosowaniu trybu ścisłego dla JavaScriptu, bo w takiej sytuacji próba przypisania nowej wartości do właściwości może wygenerować błąd (np. w przeglądarce IE, ale nie w Operze na Presto).

Właściwość classList pojawia się dopiero w specyfikacji DOM4.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Element : Node {
	[SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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