Slovník pojmů

DOM

DOM je strom dokumentu uvnitř prohlížeče. Dává JavaScriptu způsob, jak najít správný element, reagovat na událost a bezpečně změnit konkrétní část rozhraní, aniž by se z něj stala nekontrolovaná směs HTML řetězců.

Stručná definice

Strom uzlů mezi HTML dokumentem a interaktivním rozhraním.

Prohlížeč při načtení HTML vytváří objektový model dokumentu. Obsahuje dokument, elementy, textové uzly a atributy uspořádané do vztahů rodič, potomek a sourozenec. Element tlačítka, nadpis nebo odstavec tak není pro skript jen kus textu, ale konkrétní uzel, jehož obsah, atributy a události lze řízeně číst nebo měnit.

DOM není samotný HTML zdrojový soubor ani vizuální snímek stránky. Browser opravuje některé neúplné struktury podle pravidel HTML parseru a JavaScript může strom následně doplnit, odstranit nebo přeuspořádat. CSS potom určuje, jak se tyto prvky vykreslí; vizuální pořadí může být jiné než pořadí v DOM. Změna v DOM se navíc sama neukládá do databáze ani neposílá na server.

Jaký problém řeší

Umožňuje přesnou a řízenou interakci se stránkou

DOM dává aplikaci model, na němž může měnit stav rozhraní, obsloužit formulář nebo reagovat na data z API.

  • vyhledání konkrétního tlačítka, formulářového pole nebo informační oblasti
  • reakce na kliknutí, změnu hodnoty, odeslání formuláře nebo klávesovou událost
  • bezpečné nastavení textu, atributu a stavu existujícího elementu
  • přidání nebo odebrání položky košíku, chyby validace či stavu načítání
  • práce frontendového frameworku, který změny DOM obvykle koordinuje nad vlastním stavem

Praktický příklad

Aktualizace dostupnosti produktu bez vkládání nedůvěryhodného HTML

Po kliknutí na tlačítko skript načte stav skladu z API. Vybere existující element přes data atribut a aktualizuje jeho text. Serverová odpověď není přebírána jako hotové HTML, proto její text nemůže tímto krokem vytvořit nový skript nebo nečekaný element v dokumentu.

Ukázka řeší pouze klientské zobrazení. API musí data validovat a aplikace musí samostatně rozhodnout, kdo má právo vidět nebo měnit skladové informace. V reálné aplikaci je vhodné doplnit také stav načítání, timeout a srozumitelný chybový stav.

JavaScript

const button = document.querySelector('[data-stock-check]');
const result = document.querySelector('[data-stock-result]');

button?.addEventListener('click', async () => {
  const response = await fetch('/api/products/123/availability');
  if (!response.ok) throw new Error('Dostupnost nelze načíst.');

  const data = await response.json();
  result.textContent = data.inStock ? 'Skladem' : 'Momentálně není skladem';
});

Jak funguje

Od HTML k bezpečné změně konkrétního uzlu

Textový diagram: HTML → parser prohlížeče → DOM strom → událost a JavaScript → změna elementu → nové vykreslení.

  1. Prohlížeč parsuje HTML Z odpovědi vytvoří dokument se stromem uzlů. Pravidla parseru mohou výsledek upravit oproti neplatnému nebo neúplnému zdrojovému zápisu.
  2. Vzniknou vztahy ve stromu Elementy mají rodiče, potomky a sourozence; text i atributy jsou součástí modelu dokumentu.
  3. JavaScript vybere cíl Selektor nebo uložená reference najde konkrétní element. Selektor má vyjadřovat význam, ne náhodnou vizuální pozici.
  4. Událost nebo data změní stav Handler může nastavit text, hodnotu pole, bezpečný atribut či třídu odpovídající stavu rozhraní.
  5. Prohlížeč upraví zobrazení Podle DOM a CSS přepočítá nezbytné části vykreslení. Změna zůstává lokální, dokud aplikace výslovně nepošle data na server.

Důležité souvislosti

Uzly, události a stav mají vlastní odpovědnosti.

Pochopení stromu pomáhá napsat jednodušší a přístupnější interakce než ruční skládání velkých bloků HTML.

Element, text a atribut

Element reprezentuje například button nebo p, textový uzel jeho obsah a atribut doplňuje vlastnost jako aria-expanded či disabled. Každá změna má zohlednit význam prvku.

Rodič, potomek a sourozenec

Stromová struktura určuje, kde element žije. Pomáhá vybrat správný cíl a pochopit, proč se událost může šířit přes předky.

Události

Kliknutí, odeslání formuláře nebo změna pole mohou spustit handler. Správný návrh řeší i klávesnici, focus a nativní výchozí chování.

DOM a vykreslení

CSSOM a další interní struktury se podílejí na výsledném zobrazení. Zasunutý nebo vizuálně přesunutý prvek může být stále v DOM a přístupnostním stromu.

Bezpečné API

Pro běžný text je vhodné textContent, pro atributy konkrétní bezpečný postup a pro povolené HTML promyšlená sanitizace. Neověřený řetězec nemá být bez dalšího interpretován jako HTML.

Vztah k podobným pojmům

DOM není zdrojový dokument, styl ani uložená data.

Záměna těchto vrstev vede k chybám v bezpečnosti, přístupnosti i očekáváních uživatele.

HTML
Je značkovací dokument a jeho sémantika. DOM je runtime model, který prohlížeč z HTML vytvoří a který se může změnit.
CSS
Řídí prezentaci. Dokáže změnit vizuální pořadí nebo skrýt prvek, ale nemění automaticky sémantický a stromový význam dokumentu.
JavaScript
Je jazyk, kterým lze s DOM pracovat. DOM je browserové API, ne součást samotného standardu jazyka v každém runtime.
Databáze a API
DOM drží klientský pohled na data. Trvalou změnu objednávky nebo skladu musí potvrdit serverová aplikace a její databáze.

Výhody a omezení

Přímá práce s rozhraním vyžaduje disciplinu.

Přínosy

  • přesná a postupná změna konkrétní části stránky bez plného reloadu
  • nativní události, formuláře a focus dostupné napříč browsery
  • stromová struktura, která podporuje sémantické HTML a přístupnost
  • možnost reagovat na síťová data a zobrazit stav načítání či chyby

Rizika a časté chyby

  • vkládat nedůvěryhodný řetězec jako HTML a otevřít XSS
  • měnit velké části stromu příliš často a zhoršit výkon i stabilitu focusu
  • použít vizuální pořadí jako náhradu logického pořadí v dokumentu
  • považovat klientskou změnu za potvrzené uložení na serveru
  • zapomenout, že skrytý prvek může stále ovlivňovat asistivní technologie nebo tabulátorové pořadí

Kdy s DOM pracovat

Když interakce přidává hodnotu nad funkčním HTML základem.

Přímá práce s DOM dává smysl pro malé interakce: rozbalení nápovědy, bezpečnou aktualizaci dostupnosti, řízení focusu v dialogu nebo zobrazení validační chyby. Velké aplikace mohou používat framework, který aktualizace DOM organizuje za vývojáře. I pak ale vývojář potřebuje rozumět skutečnému stromu, událostem a sémantice výsledného HTML.

Ne každý stav musí řešit JavaScript. Navigace a odeslání formuláře mají často přirozenou HTML a HTTP cestu. Rozhraní je odolnější, pokud dokáže základní úlohu dokončit i při chybě skriptu a JavaScript používá jako vylepšení, ne jako důvod, proč se ztratí obsah nebo ovládání.

Na co myslet

Měnit konkrétní prvek, zachovat význam a nepřenášet důvěru z klienta.

Bezpečná a přístupná práce s DOM je součástí běžného frontendového návrhu.

  • vycházet ze sémantického HTML a nativních ovládacích prvků místo klikacích imitací
  • pro textová data používat bezpečné textové API a pro povolené HTML jasně určenou sanitizaci
  • po změně ověřit focus, klávesovou navigaci, oznamování chyb a stav ovládacích prvků
  • omezit rozsah změn a měřit výkon u dlouhých seznamů nebo častých aktualizací
  • posílat trvalé změny na server a na odpověď reagovat tak, aby UI nepředstíralo úspěch

Časté otázky

DOM bez častých záměn

Je DOM stejné jako HTML?

Ne. HTML je přenesený dokument, DOM je objektový strom vytvořený prohlížečem. Parser a JavaScript mohou způsobit, že se DOM od původního zdroje liší.

Uloží změna DOM data do databáze?

Ne. Změní jen aktuální stav v prohlížeči. Trvalá změna vyžaduje požadavek na server a jeho úspěšné zpracování.

Proč nevkládat text z API jako HTML?

Pokud data nejsou přísně kontrolovaná a bezpečně sanitizovaná, může interpretace jako HTML spustit nebo vložit nečekaný obsah. Pro běžný text je bezpečnější nastavit textový obsah.

Je DOM jen pro JavaScript?

DOM je standardní objektový model dokumentu v prohlížeči; JavaScript je nejběžnější jazyk, kterým s ním webová aplikace pracuje. Přístupné HTML a CSS jsou důležité i bez vlastního skriptu.

Jak stavím uživatelské rozhraní v praxi

Interakce stavím na sémantickém HTML a bezpečném propojení s API.

Při vývoji aplikací řeším client-side stav společně s přístupností, chybovými scénáři a backendovou kontrolou dat.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.