Pokud potřebujete změnit obsah elementu, máte v JS opět k dispozici několik možností.
Nejjednodušším způsobem je využit metodu innerHTML
, která vám dovoluje do elementu vložit přímo HTML kód, které zároveň prohlížeč rovnou vykreslí.
Pokud vám v dané situaci stačí použít pouze textový obsah, doporučuji využít metodu textContent
.
Další možností je vytvořit jednotlivé prvky v paměti (text pomocí createTextNode
, elementy createElement
) a ty poté je vložit do dokumentu.
Pokud chceme vkládat vlastní obsah do elementu, je také potřeba vzít v potaz bezpečnost. Na ochranu před XSS útokem je bezpečnější používat metody createTextNode
nebo textContent
, které pracují pouze s textem. XSS je typ útoku, při kterém se do webové stránky vkládá škodlivý JavaScript kód, který je pak spuštěn v prohlížeči uživatele. Můžete také preventivně escapovat vstup nahrazováním potenciálně nebezpečných znaků jako jsou <, > apod.
Jak začít? Nejprve je třeba získat referenci na element, který zamýšlíme měnit. Tento článek nabízí užitečné ukázky kódu, které můžete použít pro vlastní účely. Například element s ID "myDiv" můžeme najít pomocí metody getElementById().
var element = document.getElementById("myDiv");
Při použití zmiňovaných metod je důležité se ujistit, že element, na který se odkazujete, existuje. Pokud se odkazujete na neexistující element, může dojít k chybě.
Vkládání stringu
innerHTML
Je důležité si uvědomit, že innerHTML
dovoluje vkládá do elementu HTML kód a tím představuje bezpečnostní riziko (především riziku XSS útoku).
Například následující kód vloží obrázek a odkaz do elementu s id "myDiv":
element.innerHTML = "<img src='obrazek.jpg' alt='Obrázek'> <a href='https://www.example.com'>Odkaz</a>";
Pomocí operátoru +=
můžete také připojit další obsah k existujícímu obsahu elementu.
element.innerHTML += " Nový obsah";
textContent
Metoda textContent
se nepodobá innerHTML
. Pokud do ní vložíte HTML, pak ho escapuje a nahradí < a > entitami (< a >).
A jak z názvu napovídá umožňuje nastavit nebo vrátit textový obsah elementu.
Například následující kód změní textový obsah elementu s id "myDiv" na nový obsah:
element.textContent = "Nový obsah";
Metoda ignoruje HTML značky a zobrazí pouze samotný text. Například pokud použijeme textContent
k nastavení obsahu elementu s HTML značkami, zobrazí se pouze samotný text, aniž by byly značky interpretovány:
element.textContent = "<p>Nový obsah</p>"; // Zobrazí se "Nový obsah" bez značky <p>
innerText
Vlastnost innerText
se používá zdánlivě obdobně jako textContent
. Nicméně je mezi nimi několik rozdílů^1:
-
textContent
vrátí text každého prvku v nodu. Naproti tomu innerText zohledňuje stylování elementu a nevrátí text „skrytých“ prvků. -
drobné odchylky v bílých znacích.
-
textContent
je metoda rozhraníNode
ainnerText
zaseElement
-
textContent
může být rychlejší nežinnerText
, protože nemusí zohledňovat stylování elementu.
Vkládání elementů
Další způsoby, jak změnit obsah elementu v HTML dokumentu, je pomocí metod pro jejich manipulaci, jako je appendChild
nebo insertBefore
.
createTextNode
Metoda createTextNode
se používá k vytvoření nového textového nodu. Ten nepřekvapivě obsahuje pouze textový obsah a neobsahuje žádné HTML.
Například pokud chcete vytvořit nový textový uzel s obsahem "Hello, World!", můžete použít následující kód:
let textNode = document.createTextNode("Hello, World!");
Poté můžete tento node přidat do dokumentu pomocí metody appendChild
nebo insertBefore
.
Například následující kód přidá textový uzel do elementu s id "myDiv":
let textNode = document.createTextNode("Hello, World!");
element.appendChild(textNode);
Můžete také nový node vložit přímo do elementu pomocí vlastnosti textContent nebo innerHTML.
let textNode = document.createTextNode("Hello, World!");
element.textContent = textNode.textContent;