Úloha 2 – DOM manipulace: čtení a zápis hodnot z inputu
| Sitio: | Moodle ZČU |
| Curso: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Libro: | Úloha 2 – DOM manipulace: čtení a zápis hodnot z inputu |
| Imprimido por: | Guest user |
| Día: | domingo, 18 de octubre de 2026, 10:00 |
Úvod do úlohy
Po zvládnutí základů přístupu k elementům se v další fázi naučíme měnit jejich obsah a vlastnosti. Právě tato schopnost dává JavaScriptu jeho sílu – umožňuje nám živě upravovat obsah webové stránky, reagovat na vstup uživatele, načítat data z jiných zdrojů nebo měnit styl prvků podle situace.
Typickým příkladem je aktualizace textu po kliknutí, výměna obrázku, zobrazení výsledku výpočtu nebo zvýraznění aktivního tlačítka. Abychom to dokázali bezpečně a efektivně, musíme pochopit rozdíly mezi různými vlastnostmi prvků – zejména textContent, innerHTML, value a src.
Teorie a principy
Každý HTML prvek má určité vlastnosti a atributy, které určují jeho obsah, vzhled i chování. Pomocí DOM s nimi můžeme pracovat přímo v JavaScriptu.
Změna textu a HTML obsahu
-
textContent
Vrací nebo nastavuje čistý text uvnitř elementu. Je bezpečný, protože neinterpretuje HTML značky.
Používá se tam, kde nechceme, aby se uživatelský vstup změnil v kód. -
innerHTML
Vrací nebo nastavuje HTML obsah uvnitř elementu. Umožňuje vkládat značky, např.<b>,<p>,<img>atd.
Je však potenciálně nebezpečný, pokud vkládáme text od uživatele – mohl by obsahovat škodlivý kód (XSS útok).
Práce s formuláři a obrázky
-
value– používá se u vstupních polí (<input>,<textarea>), kde představuje aktuální hodnotu. -
src– odkazuje na zdroj obrázku, videa nebo skriptu. Pomocí této vlastnosti můžeme měnit obrázky za běhu programu.
Práce s atributy
Každý HTML element má také atributy, které lze číst a měnit metodami:
-
getAttribute("nazev")– vrátí hodnotu atributu -
setAttribute("nazev", "hodnota")– nastaví novou hodnotu -
removeAttribute("nazev")– smaže atribut z elementu
Práce s CSS třídami
Pomocí objektu classList můžeme jednoduše ovládat CSS třídy:
-
element.classList.add("trida")– přidá třídu -
element.classList.remove("trida")– odstraní třídu -
element.classList.toggle("trida")– přepne třídu (pokud je, odebere ji, jinak přidá) -
element.classList.contains("trida")– vracítrue/falsepodle přítomnosti třídy
Praktické příklady kódu
Příklad 1: Bezpečná změna textu pomocí textContent
Příklad 2: Vložení HTML pomocí innerHTML (pozor na bezpečnost!)
Příklad 3: Změna atributu obrázku
Příklad 4: Přepínání CSS třídy pomocí classList
Typické chyby / záludnosti
-
Použití
innerHTMLpro neověřený obsah
Pokud doinnerHTMLvložíte text z uživatelského vstupu, hrozí bezpečnostní riziko (XSS útok). Používejte ho jen tam, kde HTML znáte a kontrolujete. -
Záměna
textContentainnerHTMLtextContentpracuje pouze s textem, zatímcoinnerHTMLzpracuje i značky. Výsledky mohou být jiné, než očekáváte. -
Změna atributu místo vlastnosti
Např.element.src = "obrazek.png"má stejný efekt jakosetAttribute("src", "obrazek.png"), ale ne všechny atributy fungují tímto způsobem (např.classNamevs.class). -
Zapomenuté přepínání tříd
Místo složité kontrolyif (classList.contains(...))používejte elegantnítoggle().
Shrnutí
-
textContent– bezpečně mění textový obsah. -
innerHTML– umožňuje vložit HTML, ale může být nebezpečný. -
value– pracuje s hodnotami formulářů. -
src,alt,href– atributy, které lze číst a měnit. -
setAttribute()agetAttribute()– univerzální práce s atributy. -
classList– pohodlný nástroj pro manipulaci s CSS třídami.
Úloha
Zadání (kontext úlohy):
Na stránce je jednoduchý formulář s jedním textovým polem a tlačítkem „Odeslat“. Po kliknutí na tlačítko se má pod formulářem zobrazit zpráva s textem „Děkujeme, [jméno]!“, kde [jméno] je obsah textového pole. Pokud uživatel klikne znovu, zpráva se má aktualizovat podle nové hodnoty.
Cíl úlohy:
Procvičit si čtení a zápis hodnot z formulářových prvků (value, textContent) a manipulaci s DOM. Naučit se reagovat na kliknutí bez znovunačtení stránky.
Vstupní podmínky:
Student pracuje pouze s jedním HTML souborem.
JavaScript je vložen do <script> na konci stránky.
Požadovaný výstup:
-
Na stránce bude:
-
nadpis
<h2>„Zadej své jméno“, -
textové pole pro jméno,
-
tlačítko „Odeslat“,
-
prázdný
<p>element pro zobrazení zprávy.
-
-
Po kliknutí na tlačítko se:
-
získá text z pole,
-
vypíše do odstavce text ve tvaru „Děkujeme, [jméno]!“,
-
pokud je pole prázdné, zobrazí se text „Prosím, zadej jméno.“
-
Doplňující pokyny:
-
Použij
document.querySelector()pro výběr prvků. -
Využij
event.preventDefault()k zastavení odeslání formuláře. -
Ověř, zda je hodnota pole prázdná pomocí
if (vstup.value == ""). -
Text měň přes
textContent, nikoliinnerHTML.
Řešení úlohy
Co je zde splněno
-
Použití
document.querySelector()pro výběr všech prvků. -
Zastavení klasického odeslání pomocí
event.preventDefault(). -
Čtení hodnoty z textového pole pomocí
.value. -
Zápis textu do odstavce pomocí
.textContent. -
Ověření, zda je pole prázdné (
if (jmeno == "")). -
Zpráva se aktualizuje při každém kliknutí.
Vylepšení oproti začátečnické verzi
-
Použití šipkové funkce pro stručnější zápis.
-
Použití formulářové události submit místo kliknutí na tlačítko (profesionálnější přístup).
-
Využití metody
.trim()k odstranění mezer. -
Moderní řetězcová interpolace
${jmeno}místo řetězení. -
Přidán jednoduchý CSS styl pro lepší vzhled.
Poznámky
Pokud by bylo tlačítko typu
submitbezpreventDefault(), stránka by se po odeslání znovu načetla.U začátečníků je vhodné psát
==místo přísného===, aby se soustředili na logiku, ne na typy.