Middle
V čem spočívá rozdíl mezi atributy a vlastnostmi v HTML značkách?
sobes.tech AI
Odpověď od AI
Atributy jsou dvojice jméno-hodnota, které jsou přímo zapsány v otevíracím HTML tagu. Určují počáteční nebo aktuální vlastnosti prvku, ale nemusí vždy přímo odrážet jeho aktuální stav v DOM.
Vlastnosti jsou hodnoty spojené s objekty JavaScript, které představují prvky DOM. Jsou dynamické a odrážejí aktuální stav prvku.
Zde jsou klíčové rozdíly:
- Umístění: Atributy jsou v HTML, vlastnosti v objektech DOM.
- Datové typy: Atributy jsou vždy řetězce. Vlastnosti mohou mít různé datové typy (řetězce, čísla, boolean, objekty).
- Dynamika: Atributy jsou statické po načtení stránky (ačkoliv je lze změnit přes JavaScript). Vlastnosti se mohou dynamicky měnit v reakci na interakci uživatele nebo logiku skriptů.
- Vztah: Mnoho atributů má přímé odpovídající vlastnosti (například atribut
ida vlastnostid). Existují však atributy bez přímých vlastností (data-*) a vlastnosti bez přímých atributů (textContent,className).
Příklad:
<input type="text" value="Počáteční hodnota" readonly>
Zde:
type="text",value="Počáteční hodnota"areadonlyjsou atributy.
Po načtení stránky budou odpovídající vlastnosti v JavaScriptu:
// Získáme prvek input
const inputElement = document.querySelector('input');
// Vlastnosti prvku
console.log(inputElement.type); // Vypíše: "text" (vlastnost odpovídá atributu)
console.log(inputElement.value); // Vypíše: "Počáteční hodnota" (zpočátku odpovídá atributu)
console.log(inputElement.readOnly); // Vypíše: true (vlastnost odpovídá atributu, ale v camelCase)
Pokud uživatel změní text v poli, vlastnost value se aktualizuje, ale atribut value v HTML zůstane stejný, odrážející pouze počáteční hodnotu.
// Uživatel zadal "Nová hodnota"
// inputElement.value bude nyní "Nová hodnota",
// ale inputElement.getAttribute('value') stále vrátí "Počáteční hodnota".