Godzina 1: DOM (obiektowy model dokumentu) - strona jako drzewo obiektów
Godzina 2: znajdujemy element na stronie
Godzina 3: zmieniamy tekst i wygląd elementu
Godzina 4 (dziś): podmieniamy atrybut - src, class
Godzina 5: dodajemy nowy element na stronę
Godzina 6: powtórka - łączymy wyszukiwanie, zmianę i tworzenie
Rozgrzewka · 3 minuty
Rozgrzewka: tekst i wygląd z poprzedniej lekcji
Co robi innerHTML, gdy przypiszecie mu nowy tekst?
Czym różni się zmiana przez innerHTML od zmiany przez style.color?
Jak w HTML podpiąć funkcję JavaScript pod kliknięcie przycisku?
Część 1 · Odczytujemy atrybut: getAttribute
getAttribute: odczytujemy wartość atrybutu
Znacznik HTML może mieć atrybuty - src (źródło obrazka), class (klasa), id i inne - zapisane wprost w kodzie jako name="value". Metoda element.getAttribute("name") odczytuje aktualną wartość podanego atrybutu z elementu, który już znaleźliście w DOM (np. przez getElementById).
const picture = document.getElementById("photo");
console.log(picture.getAttribute("src")); // result wg MDN: "image-a.svg"
Jeśli element nie ma podanego atrybutu, getAttribute nie zgłasza błędu - zwraca null (pustą wartość, brak atrybutu).
MDN, Web/API/Element/getAttribute: „The getAttribute() method of the Element interface returns the string value of the specified attribute of the specified element. It returns null if the element doesn't have an attribute with the given name.” - „Metoda getAttribute() interfejsu Element zwraca wartość tekstową podanego atrybutu podanego elementu. Zwraca null, jeśli element nie ma atrybutu o podanej nazwie.” (tłum. własne)
Część 2 · Zmieniamy atrybut: setAttribute
setAttribute: ustawiamy nową wartość atrybutu
Metoda element.setAttribute("name", "value") ustawia nową wartość atrybutu. Jeśli atrybut już istnieje, zostaje zaktualizowany - jeśli nie istnieje, zostaje dodany.
MDN, Web/API/Element/setAttribute: „setAttribute() sets the value of an attribute on the specified element. If the attribute already exists, the value is updated; otherwise a new attribute is added with the specified name and value.” - „setAttribute() ustawia wartość atrybutu na podanym elemencie. Jeśli atrybut już istnieje, wartość zostaje zaktualizowana - jeśli nie, zostaje dodany nowy atrybut o podanej nazwie i wartości.” (tłum. własne)
Część 3 · getAttribute("src") kontra element.src
getAttribute("src") kontra element.src
Wartość atrybutu src można odczytać na dwa sposoby: metodą getAttribute("src") albo bezpośrednio przez właściwość element.src. Właściwość src odzwierciedla atrybut src ze znacznika <img>. Dla obrazka wskazanego zwykłą nazwą pliku - tak jak w tym ćwiczeniu - oba zapisy dają ten sam efekt.
MDN, Web/API/HTMLImageElement/src: „The src property of the HTMLImageElement interface specifies the image to display in the <img> element. It reflects the <img> element's src content attribute.” - „Właściwość src interfejsu HTMLImageElement określa obrazek do wyświetlenia w elemencie <img>. Odzwierciedla ona atrybut treściowy src elementu <img>.” (tłum. własne)
Część 4 · Zmieniamy klasę: setAttribute("class", ...)
setAttribute("class", ...): zmiana etykiety elementu
Atrybut class to etykieta na elemencie - jedna nazwa albo kilka, po których CSS rozpoznaje, jak element ma wyglądać. setAttribute("class", "highlight") podmienia całą etykietę na nową (nie dokleja jej do starej).
Uzupełnienie: wygodniejszym sposobem dodania jednej klasy bez nadpisania pozostałych jest classList (np. classList.add("highlight")). Ta właściwość zawiera listę klas elementu i pozwala dodawać albo usuwać pojedyncze nazwy.
Ciekawostka z MDN: właściwość, przez którą zmieniacie klasę elementu w JavaScript, nie nazywa się class, tylko className. Słowo class jest zastrzeżone w wielu językach programowania używanych do pracy z DOM, więc nie mogło zostać nazwą właściwości - stąd className.
MDN, Web/API/Element/setAttribute (slajd 4) · MDN, Web/API/Element/classList: „The read-only classList property of the Element interface contains a live DOMTokenList collection representing the class attribute of the element.” - „Właściwość classList (tylko do odczytu) interfejsu Element zawiera żywą kolekcję DOMTokenList reprezentującą atrybut class elementu.” (tłum. własne)