js/components/card.js — kortelė rankomis
Dabar — kortelė. Kodo stulpelyje js/components/card.js: createCard(pic) gauna vieno paveikslo duomenis ir grąžina paruoštą <article> elementą.
Skaityk jį kaip receptą: sukuriam article, į jį — header su img, tada body su pavadinimu ir data. Kiekvienas mazgas — createElement, sukonfigūruotas ir appendChild. Funkcija grąžina kortelę, bet jos niekur neįdeda — kur ją pastatyti, sprendžia kviečiantysis (5 pamokoje — galerijos tinklelis).
Trys detalės, į kurias verta atkreipti dėmesį:
img.alt = pic.title— tikras alternatyvusis tekstas. Ekrano skaitytuvai jį perskaito; tai ne dekoracija, o prieinamumas.img.loading = 'lazy'— naršyklė atsisiunčia paveikslą tik kai jis netoli ekrano. Nemokamas našumo laimėjimas (plačiau — 5 pamokoje).title.textContent = pic.title— pavadinimas ateina iš API, tadtextContent, neinnerHTML.
Patikrink. Laikinai main.js sukurk vieną kortelę su išgalvotais duomenimis ir įdėk į puslapį:
import { createCard } from './components/card.js';
const demo = {
url: 'https://apod.nasa.gov/apod/image/2312/… .jpg',
title: 'The Andromeda Galaxy',
date: '2026-07-11',
};
document.getElementById('app').appendChild(createCard(demo));
Serviruok (python -m http.server) ir atidaryk — turi matyti kortelę su nuotrauka, pavadinimu ir data.
Spąstai (XSS). Įsivaizduok, kad pavadinimą įrašytum per
innerHTML:title.innerHTML = pic.title; // ❌ pavojingaJei koks nors pavadinimas (iš API ar vartotojo) būtų
<img src=x onerror="alert(document.cookie)">, naršyklė jį įvykdytų — svetimas kodas tavo puslapyje. SutextContenttas pats tekstas tiesiog parodomas kaip simboliai. Kintantį tekstą visada dėk pertextContent.innerHTMLpalik tik saugiam, tavo paties rašytam HTML.