W kodzie HTML przypisano pewne znaczniki do klasy o nazwie „nomargin”. Aby wykonać za pomocą języka JavaScript operacje na tych znacznikach, można posłużyć się funkcją
A. getElementsByClassName("nomargin")
B. getElement("nomargin")
C. getElementsByTagName("nomargin")
D. getElementById("nomargin")
Pytanie z egzaminu CKE, czerwiec 2022 (arkusz E.14-SG-22.06).
Właściwą funkcją jest document.getElementsByClassName("nomargin"), ponieważ w pytaniu chodzi o elementy HTML przypisane do klasy CSS o nazwie nomargin. Klasa może być nadana wielu elementom naraz, więc metoda zwraca kolekcję elementów, dokładniej HTMLCollection, a nie pojedynczy obiekt. To ważne praktycznie: jeśli chcesz np. zmienić styl wszystkich takich elementów, trzeba przejść po kolekcji pętlą i wykonać operację na każdym elemencie osobno. Przykład: można ustawić element.style.margin = "0" albo dodać inną klasę przez element.classList.add("aktywny"). Z mojego doświadczenia to jedna z podstawowych rzeczy przy pracy z DOM, bo klasy służą właśnie do grupowania elementów według wspólnej cechy wizualnej albo funkcjonalnej. W standardowym JavaScript metoda ta jest częścią DOM API i może być wywoływana na obiekcie document albo na konkretnym elemencie, gdy szukamy tylko wewnątrz danego fragmentu strony. Dobrą praktyką jest też pamiętanie, że alternatywnie można użyć document.querySelectorAll(".nomargin"), gdzie kropka oznacza selektor klasy jak w CSS, ale w tym pytaniu najlepiej pasuje dokładnie getElementsByClassName("nomargin").
Jeżeli elementy mają przypisaną klasę nomargin, to nie należy ich szukać tak, jakby nomargin było identyfikatorem albo nazwą znacznika. W DOM różne atrybuty HTML obsługuje się różnymi metodami i to nie jest tylko kwestia nazwy funkcji, ale też sposobu działania przeglądarki. Metoda getElement("nomargin") nie jest standardową metodą obiektu document w klasycznym DOM API, więc taki zapis po prostu nie zadziała w zwykłym JavaScripcie. Czasem uczniowie kojarzą ogólnie słowo "element" i próbują złożyć nazwę funkcji intuicyjnie, ale w programowaniu webowym trzeba trzymać się konkretnych metod udostępnionych przez przeglądarkę. getElementById("nomargin") służy do pobrania elementu po atrybucie id, a id zgodnie z dobrymi praktykami powinno być unikalne w dokumencie. Klasa natomiast może wystąpić na wielu elementach, więc potrzebna jest metoda zwracająca wiele wyników. getElementsByTagName("nomargin") też nie pasuje, bo ta metoda wyszukuje po nazwie znacznika, na przykład body, p, section, img albo input. Nazwa nomargin nie jest nazwą znacznika HTML, tylko wartością atrybutu class. Typowy błąd myślowy polega tu na mieszaniu trzech pojęć: id identyfikuje pojedynczy element, tag określa typ elementu, a class grupuje elementy według wspólnego zastosowania. Moim zdaniem najprościej zapamiętać to tak: gdy w CSS pisałbyś .nomargin, to w DOM najbliższą metodą z podanych odpowiedzi jest getElementsByClassName("nomargin").