====== DOM manipuláció JavaScript segítségével ====== A Document Object Model (DOM) a weboldalak szerkezetét írja le egy hierarchikus fa formájában, amelyen keresztül a JavaScript hozzáférhet és módosíthatja az oldal tartalmát és szerkezetét. A DOM manipuláció az egyik legfontosabb eszköz a dinamikus weboldalak fejlesztésében, mivel lehetővé teszi az elemek hozzáadását, eltávolítását, módosítását, valamint az eseménykezelést. ===== Document Object Model ===== A **DOM (Document Object Model)** egy platformfüggetlen, objektumalapú reprezentációja egy HTML- vagy XML-dokumentumnak. A DOM egy fa struktúrában írja le az oldal elemeit, ahol minden HTML-címke egy csomópontként (**node**) jelenik meg, és hierarchikus kapcsolatban áll a többi elemmel. A DOM-on keresztül JavaScript segítségével elérhetjük és módosíthatjuk az oldal tartalmát és szerkezetét. A DOM egy objektummodell, amelyben minden HTML-elem egy objektumként létezik. Például egy egyszerű HTML-oldal: My title

A heading

Link text
A DOM ezt az oldalt a következő fastruktúraként kezeli: {{:tanszek:oktatas:web_technologia_alapjai:pasted:20250310-124112.png?400}} A ''document'' objektum a teljes HTML-dokumentumot képviseli, és az egyik legfontosabb kiindulópont a DOM manipuláció során. Segítségével elérhetjük az oldal elemeit, új elemeket hozhatunk létre, módosíthatjuk a tartalmat, és kezelhetjük az eseményeket. A DOM többféle csomópontot tartalmaz, de a legfontosabbak a következők: * **Node** (csomópont): Minden, ami a DOM fában található, egy csomópont (node). A csomópontok különböző típusúak lehetnek, például elemek, attribútumok vagy szövegek. * **Element** (elem): Az element típusú csomópontok a tényleges HTML-elemeket képviselik (pl. ''div'', ''p'', ''h1'' stb.). * Példa: **

**Ez egy bekezdés.**

** * **Attribute** (attribútum): Az attribute típusú csomópontok egy HTML-elem tulajdonságait tárolják (pl. ''id'', ''class'', ''src'', ''href'' stb.). * Példa:

Ez egy fontos bekezdés.

* **Text** (szöveg): A text típusú csomópontok a HTML-elemek belső szöveges tartalmát tárolják. * Példa:

**Ez egy bekezdés.**

A DOM lehetővé teszi, hogy JavaScript segítségével: * Elemeket válasszunk ki és módosítsunk (pl. ''document.getElementById()'', ''document.querySelector()'') * Új elemeket hozzunk létre és illesszünk be (pl. ''createElement()'', ''appendChild()'') * Eseménykezelőket hozzunk létre (pl. ''addEventListener()'') * Stílusokat és attribútumokat módosítsunk (pl. ''element.style'', ''setAttribute()'') ===== DOM manipulációs technikák ===== A DOM elérésére a globális ''document'' objektumon keresztül van lehetőség, melynek dokumentációja itt található meg: https://developer.mozilla.org/en-US/docs/Web/API/Document A következő bekezdések a teljesség igénye nélkül mutatnak be néhány gyakran használt metódust. ==== Elemek kiválasztása ==== A DOM-ban található csomópontok elérését a következő függvények biztosítják: * ''getElementById(id)'' – Visszaadja az első olyan elemet, amelynek ''id'' attribútuma megegyezik a megadott értékkel. Ha nincs ilyen elem, null értéket ad vissza. * ''getElementsByClassName(className)'' – Egy ''HTMLCollection''-t ad vissza, amely tartalmazza az összes olyan elemet, amely rendelkezik a megadott osztálynévvel. * ''getElementsByTagName(tagName)'' – Egy ''HTMLCollection''-t ad vissza, amely tartalmazza az összes megadott típusú HTML elemet. * ''querySelector(selector)'' – Az első olyan elemet adja vissza, amely illeszkedik a megadott CSS-szelektorhoz. Ha nincs találat, null-t ad vissza. * ''querySelectorAll(selector)'' – Egy ''NodeList''-et ad vissza, amely tartalmazza az összes olyan elemet, amely megfelel a megadott CSS-szelektornak. DOM - Elem kiválasztás

Főcím

Ez egy bekezdés.

Ez egy másik bekezdés.

Span 1 Span 2
==== Tartalom módosítása ==== A DOM-ban található csomópontok tartalmát a következő tulajdonságok segítségével lehet elérni, illetve módosítani: * ''innerText'' és ''textContent'' – Mindkettő a szöveges tartalom lekérésére vagy módosítására szolgál, de különbség köztük, hogy az ''innerText'' figyelembe veszi a CSS láthatósági beállításait, míg a ''textContent'' minden szöveget visszaad, függetlenül a stílusoktól. * ''innerHTML'' – Az elem HTML tartalmának beállítására vagy lekérésére szolgál. Vigyázni kell vele, mert ha külső bemenetet tartalmaz, az alkalmazás sérülékennyé válhat az XSS támadásokkal szemben. DOM tartalom módosítása

Eredeti

Ez egy bekezdés HTML formázással.

==== Eseménykezelés ==== A DOM-ban található csomópontok eseményeinek (pl. kattintás, dupla kattintás, szövegmező fókuszba kerülése, drag&drop műveletek stb.) kezeléséhez a következő függvényt használhatjuk: * ''addEventListener(event, callback)'' – Eseményfigyelőt (callback függvényt) ad az elemhez, amely a megadott esemény (event) bekövetkeztekor lefut. Eseménykezelés példa ==== Attribútumok és stílus módosítása ==== A DOM csomópontjainak attribútumait és stílusát a következő függvényekkel lehet elérni és módosítani: * ''setAttribute(name, value)'', ''getAttribute(name)'' – Az elem attribútumainak beállítására, valamint lekérdezésére szolgálnak. * ''classList.add(className)'', ''classList.remove(className)'', ''classList.toggle(className)'' – Osztályok hozzáadására, eltávolítására és állapotváltására használható. * ''element.style'' – Az elem CSS-stílusának közvetlen módosítására használható. Attribútumok és stílus módosítása

Ez egy bekezdés.

==== Új elemek létrehozása és hozzáadása ==== A következő metódusokkal új csomópontokat hozhatunk létre, és adhatunk hozzá a DOM-hoz: * ''createElement(tagName)'' – Egy új HTML elemet hoz létre a megadott tag-névvel. * ''appendChild(node)'', ''prepend(node)'' – Az ''appendChild'' az elem végéhez, a ''prepend'' az elejéhez ad hozzá egy új gyerekelemet. * ''insertBefore(newNode, referenceNode)'' – Egy új elemet szúr be egy másik adott elem elé. Új elemek létrehozása és hozzáadása

Ez az eredeti bekezdés.

===== Feladat ===== A feladat egy egyszerű, dinamikus teendő lista készítése. * Legyen egy '''' szöveges mező, ahova a felhasználó beírhat egy új teendőt. * Legyen egy „Hozzáadás” gomb, melynek lenyomásakor a beírt szöveg kerüljön fel egy ''