Temat 11 · 2 × 45 minINF.03
Model DOM: znajdowanie elementów i zmiana treści
Do tej pory twoje skrypty rozmawiały z tobą przez konsolę i okienka. Od tej lekcji zaczynają zmieniać stronę: podmieniać tekst akapitu, pogrubiać nagłówki, wpisywać wynik obliczenia pod przyciskiem. Pośrednikiem jest DOM (Document Object Model) – obiektowy model dokumentu, czyli HTML strony widziany przez JavaScript jako drzewo obiektów. Każde zadanie praktyczne INF.03 z JavaScriptem zaczyna się od znalezienia elementu w tym drzewie, a w testach pisemnych DOM to najczęstszy temat „kliencki”.
Drzewo DOM
Gdy przeglądarka wczytuje HTML, buduje z niego drzewo: każdy znacznik staje się węzłem elementu (element node), a tekst wewnątrz – węzłem tekstowym (text node). Korzeniem jest obiekt document, pod nim <html>, dalej <head> i <body> i tak w głąb. Element wewnątrz innego to jego dziecko (child), element nad nim – rodzic (parent), elementy obok – rodzeństwo (siblings).
Odpowiada mu taki HTML:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Sklep</title>
</head>
<body>
<h1>Oferta</h1>
<p id="opis">Dziś promocja</p>
<ul class="lista">
<li>Chleb</li>
<li>Masło</li>
<li>Mleko</li>
</ul>
<button id="kup">Kup</button>
</body>
</html>JavaScript nie pracuje na pliku .html – pracuje na tym drzewie. Zmiana węzła natychmiast zmienia to, co widać na ekranie, a plik na dysku zostaje nietknięty.
Obiekt document ma gotowe skróty do najważniejszych węzłów:
<h1>Oferta</h1>
<p id="opis">Dziś promocja</p>
<p id="info"></p>console.log(document.title); // tytuł z <title> (tu pusty – plac zabaw nie ma <head>)
console.log(document.body.children.length); // liczba elementów bezpośrednio w <body>
console.log(document.documentElement.tagName); // HTML
document.title = 'Sklep – promocje'; // zmiana tytułu karty
document.getElementById('info').textContent =
'Na stronie są ' + document.body.children.length + ' elementy.';Kiedy skrypt widzi elementy
Przeglądarka czyta HTML od góry. Skrypt umieszczony w <head> uruchamia się, zanim powstanie <body> – getElementById zwraca wtedy null, a próba odczytu .value kończy się błędem TypeError: Cannot read properties of null z poprzedniej lekcji. Masz trzy bezpieczne opcje:
<!-- 1. skrypt na końcu <body> – elementy już istnieją (najprostsze, wystarczy na egzaminie) -->
<body>
<p id="opis">…</p>
<script src="skrypt.js"></script>
</body>
<!-- 2. atrybut defer – skrypt z <head> czeka na zbudowanie drzewa -->
<head>
<script src="skrypt.js" defer></script>
</head>
<!-- 3. kod w funkcji uruchamianej dopiero kliknięciem – w chwili kliknięcia strona dawno jest gotowa -->
<button onclick="pokaz()">Pokaż</button>W placu zabaw kod JS jest zawsze wstawiany na końcu <body>, więc elementy są gotowe.
getElementById – jeden element po identyfikatorze
Najważniejsza metoda egzaminu: document.getElementById('nazwa') zwraca element o atrybucie id="nazwa" albo null, gdy takiego nie ma. id musi być unikalne na stronie – dlatego metoda zwraca pojedynczy element, nie listę. Działa tylko na document (nie na innych elementach).
<h2 id="tytul">Dzisiejsza oferta</h2>
<p id="opis">Jeszcze nic nie wiadomo.</p>
<button id="pokaz">Pokaż ofertę</button>const tytul = document.getElementById('tytul'); // element zapisany w zmiennej
const opis = document.getElementById('opis');
console.log(tytul.tagName); // H2
console.log(opis.textContent); // Jeszcze nic nie wiadomo.
document.getElementById('pokaz').addEventListener('click', () => {
tytul.textContent = 'Promocja -20%';
opis.textContent = 'Wszystkie zeszyty 20% taniej do piątku.';
});
console.log(document.getElementById('cennik')); // null – nie ma takiego idElement zapisuj w zmiennej o znaczącej nazwie (const opis = …) zamiast powtarzać document.getElementById('opis') w pięciu linijkach – kod jest krótszy, a egzaminator widzi kryterium „znaczące nazewnictwo”.
Zmiana treści: innerHTML, textContent, innerText
Co zobaczy użytkownik w akapicie po wykonaniu kodu?
document.getElementById('p1').innerHTML = 'Cena: <b>20 zł</b>';
document.getElementById('p2').textContent = 'Cena: <b>20 zł</b>';Trzy właściwości czytają i ustawiają zawartość elementu:
| Właściwość | Przy zapisie | Przy odczycie |
|---|---|---|
innerHTML | napis jest parsowany jako HTML – znaczniki działają | HTML wnętrza ze znacznikami |
textContent | napis wstawiany dosłownie – znaczniki widać jako tekst | cały tekst, także ukryty CSS-em |
innerText | jak textContent | tylko tekst widoczny na ekranie, z uwzględnieniem CSS (wolniejsze) |
<p id="p1">—</p>
<p id="p2">—</p>
<p id="p3">Pierwszy <b>pogrubiony</b> <span style="display:none">ukryty</span> akapit</p>
<button id="zmien">Zmień</button>document.getElementById('zmien').addEventListener('click', () => {
document.getElementById('p1').innerHTML = 'Cena: <b>20 zł</b>';
document.getElementById('p2').textContent = 'Cena: <b>20 zł</b>';
});
const p3 = document.getElementById('p3');
console.log(p3.innerHTML); // Pierwszy <b>pogrubiony</b> <span style="display:none">ukryty</span> akapit
console.log(p3.textContent); // Pierwszy pogrubiony ukryty akapit
console.log(p3.innerText); // Pierwszy pogrubiony akapit (ukryty pominięty)Którą wybrać?
- Wynik obliczenia, komunikat, imię użytkownika →
textContent. Jest szybsze i bezpieczne: jeśli ktoś wpisze w pole<img src=x onerror=…>, zobaczy tekst, a nie uruchomi kodu. - Potrzebujesz znaczników (łamanie linii
<br>, pogrubienie, lista zbudowana w pętli) →innerHTML.
W arkuszach CKE wszędzie występuje innerHTML – jest w tabeli pomocniczej i w pytaniach testowych. Możesz go używać do wyniku; textContent nie da ci ani punktu więcej, ani mniej. Dopisywanie na końcu działa dla obu: wynik.innerHTML += '<br>kolejna linia'.
Kolekcje: getElementsByClassName i getElementsByTagName
id jest jedno, ale klasę ma wiele elementów. document.getElementsByClassName('nazwa') zwraca kolekcję (HTMLCollection) wszystkich elementów z tą klasą, a getElementsByTagName('p') – wszystkie elementy danego znacznika. Kolekcja działa jak tablica: ma .length, elementy wybierasz przez [i]. Nie jest jednak prawdziwą tablicą – nie ma metod push, forEach ani map.
Co zrobi ten kod?
var elementy = document.getElementsByClassName('wazne');
for (var i = 0; i < elementy.length; i++) {
elementy[i].style.fontWeight = 'bold';
}<p class="wazne">Termin oddania: piątek.</p>
<p>Zwykły akapit.</p>
<p class="wazne">Przynieś legitymację.</p>
<ul>
<li class="wazne">Pierwszy punkt</li>
<li>Drugi punkt</li>
</ul>
<button id="pogrub">Pogrub ważne</button>const wazne = document.getElementsByClassName('wazne');
console.log(wazne.length); // 3 – dwa akapity i jeden li
console.log(wazne[0].textContent); // Termin oddania: piątek.
document.getElementById('pogrub').addEventListener('click', () => {
for (let i = 0; i < wazne.length; i++) {
wazne[i].style.fontWeight = 'bold'; // pojedynczy element ma style
wazne[i].style.color = 'darkred';
}
});
const akapity = document.getElementsByTagName('p');
console.log('Akapitów: ' + akapity.length); // 3Kolekcja z getElementsBy… jest żywa (live): jeśli później dodasz na stronę nowy element z klasą wazne, kolekcja sama go „zobaczy” i length wzrośnie. To bywa zaskakujące w pętlach, które dodają elementy – wrócisz do tego w lekcji Tworzenie i usuwanie elementów.
querySelector i querySelectorAll – selektory CSS
Nowocześniejsza para metod przyjmuje dowolny selektor CSS, taki jak w arkuszu stylów:
document.querySelector(selektor)– pierwszy pasujący element albonull;document.querySelectorAll(selektor)– wszystkie pasujące jako NodeList (statyczna lista z.length,[i]i metodąforEach).
<h2>Zamówienie</h2>
<p id="opis">Wybierz dodatki:</p>
<ul class="dodatki">
<li>Ser</li>
<li>Szynka</li>
<li class="ostre">Jalapeño</li>
</ul>
<input type="radio" name="rozmiar" value="maly"> mały
<input type="radio" name="rozmiar" value="duzy" checked> duży
<p id="wynik"></p>const opis = document.querySelector('#opis'); // po id – z krzyżykiem
const pierwszyLi = document.querySelector('.dodatki li'); // pierwszy li w .dodatki
const ostre = document.querySelector('.ostre'); // po klasie – z kropką
console.log(pierwszyLi.textContent, '|', ostre.textContent); // Ser | Jalapeño
const wszystkieLi = document.querySelectorAll('.dodatki li'); // NodeList
console.log(wszystkieLi.length); // 3
wszystkieLi.forEach((li) => console.log('-', li.textContent)); // NodeList ma forEach
const zaznaczone = document.querySelector('input[name="rozmiar"]:checked');
document.getElementById('wynik').textContent =
'Rozmiar: ' + zaznaczone.value + ', dodatków: ' + wszystkieLi.length;Selektory, które przydają się najczęściej:
| Selektor | Znajduje |
|---|---|
'#wynik' | element o id="wynik" |
'.wazne' | elementy z klasą wazne |
'p', 'li', 'img' | elementy danego znacznika |
'.lista li' | li wewnątrz elementu z klasą lista |
'input[name="rozmiar"]' | pola o atrybucie name="rozmiar" |
'input[name="rozmiar"]:checked' | zaznaczone radio z tej grupy |
'section > h2' | h2 będące bezpośrednim dzieckiem section |
Którą metodę wybrać? getElementById jest najkrótsze dla pojedynczego id i pojawia się w każdej tabeli pomocniczej CKE. querySelectorAll jest najwygodniejsze dla grup (ma forEach i przyjmuje złożone selektory). Obie rodziny możesz mieszać w jednym skrypcie.
Co właściwie zmieniasz: innerHTML, value, src, style
Pytania testowe sprawdzają, czy wiesz, która właściwość odpowiada za co. Każda zmienia inną rzecz w tym samym elemencie:
| Właściwość | Czego dotyczy | Przykład | Lekcja |
|---|---|---|---|
innerHTML, textContent | treść między znacznikami | p.innerHTML = 'Koszt: 20 zł' | ta |
value | wartość pola formularza (input, select, textarea) | pole.value → '15' | Kontrolki |
src | adres obrazu / skryptu | img.src = 'obraz2.jpg' | Style, klasy i atrybuty |
style.nazwaWlasciwosci | jedna właściwość CSS | p.style.color = 'red' | Style, klasy i atrybuty |
className, classList | klasy CSS | p.classList.add('wazne') | Style, klasy i atrybuty |
id, tagName, href, alt, title | pojedyncze atrybuty | link.href | Style, klasy i atrybuty |
Kod ma po kliknięciu podmienić zdjęcie w elemencie img o id foto na plik kol2.jpg. Które polecenie to zrobi?
Zapis document.getElementById(id).style.<właściwość> = wartość to najczęstszy szablon w testach pisemnych; w pytaniu z czerwca 2022 (EE.09) należało wskazać właśnie .style. jako brakujący fragment, a dystraktory pomijały style albo wstawiały innerHTML.
<img id="foto" src="https://placehold.co/120x60/ddd/333?text=1" alt="obraz 1">
<p id="opis">Obraz numer 1</p>
<input id="numer" type="number" value="2" min="1" max="3">
<button id="zmien">Zmień obraz</button>document.getElementById('zmien').addEventListener('click', () => {
const numer = document.getElementById('numer').value; // value – pole
document.getElementById('foto').src =
'https://placehold.co/120x60/ddd/333?text=' + numer; // src – obraz
document.getElementById('opis').textContent = 'Obraz numer ' + numer; // treść
document.getElementById('opis').style.color = 'steelblue'; // CSS
});Poruszanie się po drzewie
Czasem masz element i potrzebujesz jego sąsiada albo rodzica – np. przycisk „Wykonane” ma przekreślić swój li. Służą do tego właściwości nawigacyjne:
<ul id="lista">
<li>Kupić chleb</li>
<li id="srodek">Oddać książkę</li>
<li>Zadzwonić do babci</li>
</ul>
<p id="info"></p>const srodek = document.getElementById('srodek');
const lista = document.getElementById('lista');
console.log(srodek.parentElement.id); // lista
console.log(srodek.previousElementSibling.textContent); // Kupić chleb
console.log(srodek.nextElementSibling.textContent); // Zadzwonić do babci
console.log(lista.children.length); // 3
console.log(lista.firstElementChild.textContent); // Kupić chleb
console.log(lista.lastElementChild.textContent); // Zadzwonić do babci
// querySelector działa też na elemencie – szuka tylko w jego wnętrzu
console.log(lista.querySelectorAll('li').length); // 3
console.log(srodek.closest('ul').id); // lista – najbliższy przodek pasujący do selektora
document.getElementById('info').textContent = 'Lista ma ' + lista.children.length + ' zadania.';Używaj wersji z Element w nazwie (parentElement, children, nextElementSibling). Starsze parentNode, childNodes, nextSibling zwracają też węzły tekstowe – białe znaki między znacznikami – i łatwo się na tym przejechać.
Tabela DOM z arkusza egzaminacyjnego
Każdy arkusz z JavaScriptem ma tabelę „Wybrane pola i metody modelu DOM języka JavaScript” – jedyną ściągę na stanowisku bez internetu. Nazwy są bez opisu, więc musisz je rozumieć wcześniej. Skład tabeli różni się między arkuszami – poniżej nazwy, które się w niej pojawiają, uzupełnione o kilka pokrewnych, i gdzie w kursie je znajdziesz:
| W tabeli arkusza | Co to | Lekcja |
|---|---|---|
getElementById, getElementsByTagName, getElementsByClassName, querySelector | szukanie elementów | ta |
innerHTML, innerText | treść elementu | ta |
style.color, style.fontSize, style.backgroundColor, style.display… | CSS z JS | 15 |
setAttribute, classList.add | atrybuty i klasy | 15 |
createElement, appendChild, removeChild, replaceChild, scrollIntoView | tworzenie i usuwanie | 16 |
onclick, ondblclick, onmouseover, onmouseout, onkeyup, onkeydown, onload | zdarzenia | 12 |
document.write | wypisanie podczas ładowania | 10 |
Sygnał dla ciebie: jeśli w tabeli pojawia się createElement, autor zadania spodziewa się tworzenia elementów; jeśli tylko getElementById i innerHTML – to klasyczny kalkulator.
Na egzaminie
Ściąga
| Składnia | Co robi | Przykład |
|---|---|---|
document.getElementById('x') | jeden element o id="x" lub null | const wynik = document.getElementById('wynik') |
document.querySelector('sel') | pierwszy element pasujący do selektora CSS | document.querySelector('#wynik'), '.lista li' |
document.querySelectorAll('sel') | NodeList wszystkich pasujących (forEach, length, [i]) | document.querySelectorAll('.wazne') |
document.getElementsByClassName('k') | żywa kolekcja elementów klasy k | pętla for + [i] |
document.getElementsByTagName('p') | żywa kolekcja elementów p | .length = liczba akapitów |
el.innerHTML = '…' | treść jako HTML | 'Koszt: <b>20</b> zł' |
el.textContent = '…' | treść jako czysty tekst | 'Koszt: 20 zł' |
el.innerText | tekst widoczny (CSS-aware) | odczyt |
el.innerHTML += '…' | dopisanie na końcu | += '<br>linia' |
el.value | wartość pola formularza | pole.value |
el.src, el.href, el.alt | atrybuty | img.src = '2.jpg' |
el.style.wlasciwosc | jedna właściwość CSS | el.style.color = 'red' |
el.parentElement, el.children | rodzic, dzieci | li.parentElement |
el.firstElementChild, el.nextElementSibling | pierwsze dziecko, następny brat | |
el.closest('sel') | najbliższy przodek pasujący do selektora | btn.closest('li') |
el.querySelector('sel') | szukanie tylko wewnątrz el | lista.querySelectorAll('li') |
document.title, document.body | tytuł karty, element body | |
location.hostname | nazwa serwera z adresu strony | 'localhost' |
Zadania
Trzy akapity, jeden przycisk
Strona ma trzy akapity i przycisk. Napisz skrypt w dialekcie egzaminacyjnym (atrybut onclick, getElementById, innerHTML), który po kliknięciu „Zmień” wpisuje do drugiego akapitu tekst Zmieniono o: i aktualną godzinę (new Date().toLocaleTimeString()), a do trzeciego – liczbę wszystkich akapitów na stronie w formacie Akapitów: 3.
<p id="a1">Pierwszy akapit</p>
<p id="a2">Drugi akapit</p>
<p id="a3">Trzeci akapit</p>
<button onclick="zmien()">Zmień</button>Pokaż rozwiązanie
<p id="a1">Pierwszy akapit</p>
<p id="a2">Drugi akapit</p>
<p id="a3">Trzeci akapit</p>
<button onclick="zmien()">Zmień</button>function zmien() {
const godzina = new Date().toLocaleTimeString();
document.getElementById('a2').innerHTML = 'Zmieniono o: ' + godzina;
const liczbaAkapitow = document.getElementsByTagName('p').length; // kolekcja → length
document.getElementById('a3').innerHTML = 'Akapitów: ' + liczbaAkapitow;
}Pogrub wszystkie ważne
Na stronie są akapity i punkty listy, część z klasą wazne. Dodaj dwa przyciski:
- „Pogrub ważne” – ustawia
style.fontWeight = 'bold'wszystkim elementom klasywazne(pętla pogetElementsByClassName); - „Policz” – wpisuje do akapitu
#raporttekstWażnych: X z Y elementów, gdzie X to liczba elementów klasywazne, a Y – liczba wszystkichpilirazem (użyjquerySelectorAll('p, li')).
Rozwiąż raz pętlą for z indeksem, a raz querySelectorAll + forEach.
Pokaż rozwiązanie
<p class="wazne">Sprawdzian w czwartek.</p>
<p>Zwykła informacja.</p>
<ul>
<li class="wazne">Przynieść strój</li>
<li>Opcjonalnie: kalkulator</li>
<li class="wazne">Podpis rodzica</li>
</ul>
<button id="pogrub">Pogrub ważne</button>
<button id="policz">Policz</button>
<p id="raport"></p>// wersja 1: kolekcja + pętla z indeksem (dialekt egzaminacyjny)
document.getElementById('pogrub').addEventListener('click', () => {
const wazne = document.getElementsByClassName('wazne');
for (let i = 0; i < wazne.length; i++) {
wazne[i].style.fontWeight = 'bold';
}
});
// wersja 2: querySelectorAll + forEach
document.getElementById('policz').addEventListener('click', () => {
const wazne = document.querySelectorAll('.wazne');
const wszystkie = document.querySelectorAll('p, li'); // p i li – selektor z przecinkiem
wazne.forEach((el) => (el.style.fontWeight = 'bold')); // to samo, krócej
document.getElementById('raport').textContent =
'Ważnych: ' + wazne.length + ' z ' + wszystkie.length + ' elementów';
});Uwaga: wszystkie.length liczy też akapit #raport, więc dla tego HTML wynik to Ważnych: 3 z 6 elementów (trzy p i trzy li).
Informacje o stronie
Zadanie wzorowane na pytaniu z E.14 (styczeń 2024), w którym skrypt wpisywał location.hostname do elementu. Strona info.html ma blok główny z nagłówkiem, dwoma obrazami, kilkoma akapitami i przyciskiem „Pokaż informacje”, a pod nim pusty akapit <p id="informacje"></p>.
Skrypt po kliknięciu wpisuje do tego akapitu, w trzech liniach (łamanie <br>):
Serwer: localhost
Tytuł strony: Moja strona
Obrazów na stronie: 2Kryteria oceny:
- Skrypt w JavaScript, funkcja uruchamiana przyciskiem.
- Nazwa serwera pobrana z
location.hostname. - Tytuł pobrany z
document.title. - Liczba obrazów policzona z kolekcji elementów
img(nie wpisana na stałe) – sprawdzana po dodaniu trzeciego obrazu do HTML. - Trzy linie w jednym akapicie
#informacje, etykiety i dwukropki jak we wzorze. - Znaczące nazwy zmiennych i funkcji.
HTML do skopiowania:
<h1>Moja strona</h1>
<img src="1.jpg" alt="Zdjęcie 1">
<img src="2.jpg" alt="Zdjęcie 2">
<p>Akapit pierwszy.</p>
<p>Akapit drugi.</p>
<button onclick="pokazInformacje()">Pokaż informacje</button>
<p id="informacje"></p>Pokaż rozwiązanie
<h1>Moja strona</h1>
<img src="https://placehold.co/60x40" alt="Zdjęcie 1">
<img src="https://placehold.co/60x40" alt="Zdjęcie 2">
<p>Akapit pierwszy.</p>
<p>Akapit drugi.</p>
<button onclick="pokazInformacje()">Pokaż informacje</button>
<p id="informacje"></p>document.title = 'Moja strona'; // w pliku HTML ustawia to <title>; plac zabaw nie ma <head>
function pokazInformacje() {
const serwer = location.hostname; // kryterium 2
const tytul = document.title; // kryterium 3
const liczbaObrazow = document.getElementsByTagName('img').length; // kryterium 4
document.getElementById('informacje').innerHTML = // kryterium 5
'Serwer: ' + serwer + '<br>' +
'Tytuł strony: ' + tytul + '<br>' +
'Obrazów na stronie: ' + liczbaObrazow;
}W placu zabaw podgląd nie ma adresu z serwera, więc location.hostname jest pusty. Zapisz plik w folderze htdocs XAMPP-a, otwórz http://localhost/info.html – zobaczysz Serwer: localhost. Tak samo będzie na stanowisku egzaminacyjnym.
Automatyczny spis treści
Artykuł ma kilka nagłówków h2 wewnątrz <article>. Napisz skrypt, który po załadowaniu strony (bez klikania):
- zbiera wszystkie
h2z artykułu (querySelectorAll('article h2')), - nadaje każdemu
idw formaciesekcja-1,sekcja-2… (właściwośćid), - buduje w pętli napis z listą HTML:
<li><a href="#sekcja-1">Tytuł</a></li>…, - wstawia listę przez
innerHTMLdo<ul id="spis">, - do akapitu
#licznikwpisujeSekcji: N.
Dodatkowo: numer sekcji ma pojawić się na początku nagłówka (1. Wstęp). Nie używaj jeszcze createElement – tylko napisy i innerHTML.
Pokaż rozwiązanie
<p id="licznik"></p>
<ul id="spis"></ul>
<article>
<h2>Wstęp</h2>
<p>Krótki opis problemu.</p>
<h2>Przygotowanie</h2>
<p>Czego potrzebujesz.</p>
<h2>Realizacja</h2>
<p>Krok po kroku.</p>
<h2>Podsumowanie</h2>
<p>Co dalej.</p>
</article>#spis a { color: steelblue; }const naglowki = document.querySelectorAll('article h2'); // NodeList wszystkich h2
let listaHtml = '';
naglowki.forEach((naglowek, indeks) => {
const numer = indeks + 1; // indeksy od 0, numeracja od 1
naglowek.id = 'sekcja-' + numer; // nowy atrybut id
naglowek.textContent = numer + '. ' + naglowek.textContent;
listaHtml += '<li><a href="#' + naglowek.id + '">' + naglowek.textContent + '</a></li>';
});
document.getElementById('spis').innerHTML = listaHtml; // jeden zapis zamiast czterech
document.getElementById('licznik').textContent = 'Sekcji: ' + naglowki.length;Budowanie napisu w pętli i jeden zapis innerHTML na końcu jest szybsze niż innerHTML += w każdej iteracji (przeglądarka parsowałaby HTML cztery razy). W lekcji o tworzeniu elementów zrobisz to samo przez createElement i appendChild.
Test powtórkowy
Test powtórkowy
Format jak w części pisemnej INF.03: cztery odpowiedzi, jedna poprawna.
Po pobraniu elementu metodą getElementById jego zawartość (tekst między znacznikami) można zmienić, przypisując wartość do właściwości
Aby pobrać wszystkie znaczniki strony, którym przypisano klasę nomargin, należy użyć metody
Co zrobi poniższy kod?
var elementy = document.getElementsByClassName('styl1');
for (var i = 0; i < elementy.length; i++) {
elementy[i].style.fontWeight = 'bolder';
}W wykropkowane miejsce należy wpisać
document.getElementById('naglowek').........color = 'red';Co wypisze kod, jeśli na stronie nie ma elementu o identyfikatorze cennik?
var el = document.getElementById('cennik');
console.log(el);Do elementu o id p1 przypisano: document.getElementById('p1').textContent = '<b>Uwaga</b>'; Co zobaczy użytkownik?
Które wywołanie zwróci pierwszy element listy li znajdujący się wewnątrz elementu o klasie menu?
Skrypt umieszczony w sekcji head strony zawiera wiersz: var p = document.getElementById('wynik').innerHTML; W konsoli pojawia się błąd TypeError. Dlaczego?
Co wyświetli strona otwarta pod adresem http://localhost/sklep/index.html po wykonaniu kodu?
var h = location.hostname;
document.getElementById('adres').innerHTML = h;Które z poleceń jest poprawne składniowo i zmieni kolor tekstu wszystkich elementów klasy info?
var info = document.getElementsByClassName('info');