Data v prvcích
Někdy musí prvek nést informaci, která není jeho textem. Na tlačítku stojí Moře, ale váš kód potřebuje barvu, která k němu patří. K tomu má HTML datové atributy: atributy, jejichž název začíná data- a pokračuje názvem, který si zvolíte sami:
<button id="more" data-barva="teal">Moře</button>
<button id="slunce" data-barva="orange">Slunce</button>Prohlížeč s nimi nic nedělá, jsou tu pro váš skript. JavaScript je najde ve vlastnosti prvku dataset, pod názvem bez data-:
const tlacitkoMore = document.querySelector("#more");
console.log(tlacitkoMore.dataset.barva);tealSpolu s event.target vám to dá jednu obsluhu pro spoustu tlačítek, kde každé tlačítko samo říká, co se má stát:
const nadpis = document.querySelector("h1");
const tlacitkoMore = document.querySelector("#more");
const tlacitkoSlunce = document.querySelector("#slunce");
function obarvit(event) {
nadpis.style.color = event.target.dataset.barva;
}
tlacitkoMore.addEventListener("click", obarvit);
tlacitkoSlunce.addEventListener("click", obarvit);Kliknutí na Moře obarví nadpis modrozeleně a kliknutí na Slunce oranžově. Další barva je jen další tlačítko v HTML s vlastním data-barva.
Co dalšího o datových atributech vědět:
- Název z několika slov se spojovníky se v
datasetpíše v camelCase, stejně jako ustyle:data-cas-zacatkujedataset.casZacatku. - Hodnota je vždy text. Abyste mohli počítat s
data-cena="25", převeďte ji na číslo:Number(tlacitko.dataset.cena). - Když prvek atribut nemá, dostanete
undefined. - JavaScript umí datové atributy i nastavit:
polozka.dataset.id = 7;dá prvkudata-id="7". To se hodí u prvků, které vytváří váš skript.
Jak psát:
Pokyny
Napište funkci pozdravit(event), která v prvku pozdrav ukáže pozdrav z atributu data-pozdrav tlačítka, na které se kliklo. Nastavte ji jako obsluhu kliknutí všem třem tlačítkům. Tlačítko Angličtina pak ukáže Hello.
Přidejte čtvrtý jazyk. V index.html přidejte tlačítko s atributem id, názvem jazyka jako textem a pozdravem v data-pozdrav, třeba tlačítko Němčina s pozdravem Hallo. V script.js tlačítko najděte a dejte mu stejnou obsluhu.