A DOM (Document Object Model) a HTML dokumentumok programozási interfésze. Képzeljük el egy fa struktúraként, ahol minden HTML elem egy csomópont (node). Ez a fa reprezentáció lehetővé teszi, hogy a JavaScript kód hozzáférjen és manipulálja a weboldal tartalmát, struktúráját és stílusát.
A DOM nem maga a HTML dokumentum, hanem annak egy objektum-orientált reprezentációja. Amikor a böngésző betölt egy HTML oldalt, létrehozza a DOM-ot, ami lehetővé teszi a JavaScript számára, hogy dinamikusan módosítsa az oldalt anélkül, hogy újra be kellene tölteni azt.
A DOM kulcsfontosságú szerepet játszik a dinamikus webalkalmazások létrehozásában.
A DOM segítségével új elemeket hozhatunk létre, meglévőket módosíthatunk, eltávolíthatunk, stílusokat változtathatunk és eseményeket kezelhetünk. Például, egy gombnyomásra megváltoztathatjuk egy szöveg színét, vagy új tartalmat jeleníthetünk meg egy adott területen. Mindez a DOM-on keresztül történik.
A DOM nem csak a HTML-re vonatkozik; létezik XML DOM is. A lényeg, hogy egy strukturált dokumentumot egy fa struktúrában reprezentál, ami programozhatóan elérhető és módosítható.
A JavaScript a leggyakoribb nyelv a DOM manipulálására, de más nyelvek is használhatják, amelyek rendelkeznek a DOM interfészhez való hozzáféréssel. A DOM platformfüggetlen, így a kódunk ugyanúgy fog működni különböző böngészőkben és operációs rendszereken.
Mi a DOM pontosan? Definíció és alapfogalmak
A DOM (Document Object Model) egy programozási interfész HTML, XML és SVG dokumentumokhoz. Lényegében egy objektumorientált reprezentáció, ami lehetővé teszi a programok számára, hogy hozzáférjenek a dokumentum szerkezetéhez, stílusához és tartalmához, és módosítsák azt.
Tekintsünk egy HTML oldalt. A böngésző letölti ezt az oldalt, majd a DOM segítségével fává alakítja. Ebben a fában minden HTML elem egy csomópont. Ezek a csomópontok lehetnek elemek (pl. <p>, <div>), attribútumok (pl. id, class) vagy szöveges tartalom.
A DOM nem egy programozási nyelv, hanem egy API (Application Programming Interface). Ez azt jelenti, hogy a DOM-ot különböző programozási nyelvek, például JavaScript segítségével lehet használni a weboldal tartalmának dinamikus manipulálására.
A DOM struktúrája hierarchikus. A gyökércsomópont a document
objektum, amely a teljes HTML dokumentumot képviseli. Ezen belül találhatók a különböző elemek, mint gyermekcsomópontok, amelyek további gyermekcsomópontokat tartalmazhatnak, létrehozva ezzel egy fa-szerkezetet.
A DOM lényegében egy híd a statikus HTML kód és a dinamikus JavaScript kód között, lehetővé téve a weboldalak interaktívvá és felhasználóbaráttá tételét.
A DOM lehetővé teszi:
- Az elemek kiválasztását (pl. id vagy class alapján).
- Az elemek módosítását (pl. tartalom, attribútumok, stílusok).
- Új elemek hozzáadását a dokumentumhoz.
- Elemek eltávolítását a dokumentumból.
- Eseménykezelők hozzáadását az elemekhez (pl. kattintás, egérmozgás).
A DOM implementációk különböző böngészőkben eltérhetnek, de a W3C szabvány biztosítja, hogy a legtöbb alapvető funkció mindenhol konzisztensen működjön. A JavaScript DOM API segítségével tehát egységes módon kezelhetjük a weboldalak tartalmát, függetlenül attól, hogy melyik böngészőben fut az oldal.
A DOM fa struktúrája: Csomópontok, elemek, attribútumok és szövegek
A DOM (Document Object Model) egy programozási interfész a HTML, XML és SVG dokumentumokhoz. Lényegében egy fa struktúrát képvisel, ahol a dokumentum minden része egy-egy csomópontként jelenik meg. Ez a fa struktúra teszi lehetővé a JavaScript számára, hogy interakcióba lépjen a weboldal tartalmával, szerkezetével és stílusával.
A DOM fa alapvetően különböző típusú csomópontokból áll:
- Elem csomópontok: Ezek reprezentálják a HTML elemeket, mint például a <p>, <div>, <h1> stb. Minden HTML tag egy elem csomópont.
- Attribútum csomópontok: Az elem csomópontokhoz kapcsolódnak, és az elemek attribútumait képviselik, mint például a class, id, src stb. Bár az attribútumok az elemekhez tartoznak, a DOM-ban külön csomópontokként is elérhetőek.
- Szöveg csomópontok: Ezek az elem csomópontokon belüli szöveget reprezentálják. Például a <p>Ez egy bekezdés.</p> esetén a „Ez egy bekezdés.” a szöveg csomópont.
A DOM fa hierarchikus felépítésű. A legfelső szinten a dokumentum csomópont található, ami a teljes HTML dokumentumot reprezentálja. Ebből ágaznak ki a többi csomópontok, mint például a <html>, <head> és <body> elemek. Ezek az elemek további elemeket tartalmazhatnak, létrehozva ezzel a fa struktúrát.
Az elem csomópontok a legfontosabbak a webfejlesztés szempontjából, mivel ezeket manipulálva változtathatjuk meg a weboldal tartalmát és megjelenését. Például, egy <div> elemhez hozzáadhatunk új elemeket, módosíthatjuk a szövegét, vagy megváltoztathatjuk a CSS stílusait.
Az attribútumok lehetővé teszik az elemek további testreszabását. Az id attribútum egyedi azonosítót ad egy elemnek, míg a class attribútum lehetővé teszi, hogy egy elemhez CSS stílusokat rendeljünk. A src attribútum a képek forrását adja meg.
A DOM lehetővé teszi a JavaScript számára, hogy dinamikusan változtassa a weboldal tartalmát, szerkezetét és stílusát a felhasználói interakciókra reagálva.
A DOM fa bejárása és manipulálása a JavaScript segítségével történik. A JavaScript API számos módszert kínál a csomópontok elérésére, létrehozására, módosítására és törlésére. Ezekkel a módszerekkel dinamikus és interaktív weboldalakat hozhatunk létre.
A DOM és a HTML kapcsolata: Hogyan reprezentálja a DOM a HTML dokumentumot?

A DOM, vagyis a Document Object Model, egy programozási interfész, amely a HTML dokumentumokat egy fa struktúrába rendezi. Ez a fa struktúra az adott HTML oldal elemeit reprezentálja objektumokként. Képzeljük el, hogy a HTML kód egy épület alaprajza, a DOM pedig az az objektummodell, ami lehetővé teszi, hogy programozottan hozzáférjünk és manipuláljuk az épület elemeit, például a falakat, ablakokat és ajtókat.
Minden HTML elem, mint például egy bekezdés (<p>
) vagy egy címsor (<h1>
), a DOM-ban egy objektumként jelenik meg. Ezek az objektumok hierarchikusan kapcsolódnak egymáshoz, tükrözve a HTML dokumentum szerkezetét. A legfelső szintű objektum a document
objektum, amely a teljes HTML dokumentumot képviseli.
A document
objektum tartalmazza az összes többi elemet, mint csomópontokat. A csomópontok lehetnek elemek, attribútumok, szövegek vagy akár kommentek. Például, ha van egy <p>
elemünk „Ez egy bekezdés” szöveggel, akkor a DOM-ban ez egy p
elem csomópont lesz, aminek van egy szöveges csomópont gyermeke, ami a „Ez egy bekezdés” szöveget tartalmazza.
A DOM lehetővé teszi a JavaScript számára, hogy dinamikusan változtassa a weboldal tartalmát, szerkezetét és stílusát.
A DOM fa struktúrája könnyen bejárható a JavaScript segítségével. Például használhatjuk a getElementById()
metódust egy adott azonosítóval rendelkező elem megtalálására, vagy a getElementsByTagName()
metódust az összes adott típusú elem lekérésére. Miután megtaláltunk egy elemet, módosíthatjuk a tartalmát, attribútumait vagy stílusát.
A DOM nem azonos a HTML forráskóddal. A DOM egy futásidejű reprezentáció, amelyet a böngésző hoz létre a HTML kód alapján. Ez azt jelenti, hogy a DOM dinamikusan változhat a felhasználói interakciók vagy a JavaScript kód hatására, míg a HTML forráskód változatlan marad.
A DOM és a CSS kölcsönhatása: Hogyan befolyásolja a DOM a stílusokat?
A DOM kulcsszerepet játszik a CSS stílusok alkalmazásában és módosításában a weboldalakon. A DOM fa struktúrája teszi lehetővé, hogy a CSS szelektoraival konkrét elemeket célozzunk meg és stílusokat alkalmazzunk rájuk. Minden HTML elem a DOM-ban egy csomópont, és ezeknek a csomópontoknak a stílusait a CSS szabályok befolyásolják.
A CSS szabályok alkalmazása során a böngésző a DOM-ot használja fel, hogy megtalálja a megfelelő elemeket. A CSS szelektorok (pl. osztályok, azonosítók, tagek) a DOM struktúrájában keresik a megfelelő csomópontokat. Amikor egy elem megtalálható, a CSS szabályok által meghatározott stílusok rákerülnek az adott elemre.
A JavaScript segítségével dinamikusan módosíthatjuk a DOM-ot, és ezáltal a CSS stílusokat is. Például, egy JavaScript függvény hozzáadhat egy osztályt egy elemhez (element.classList.add('valami-osztaly')
), ami azonnal megváltoztatja az elem megjelenését, ha a CSS-ben definiáltunk stílusokat erre az osztályra. Ezenkívül, közvetlenül is beállíthatjuk az elemek stílusait a element.style
tulajdonságon keresztül.
A DOM lehetővé teszi a JavaScript számára, hogy közvetlenül manipulálja az elemek CSS tulajdonságait, ezáltal interaktív és dinamikus felhasználói felületeket hozhatunk létre.
A CSS stílusok kaszkádolódnak a DOM-ban, ami azt jelenti, hogy az elemek öröklik a szülőelemük stílusait, hacsak nem írjuk felül őket egy specifikusabb szabálysal. A CSS !important
deklarációjával felülírhatjuk ezt az öröklődést, de ezt óvatosan kell használni, mert nehezebbé teheti a stílusok kezelését.
A DOM-ot használva a JavaScript figyelhet eseményekre (pl. kattintás, egérmozgás) és ezekre reagálva módosíthatja az elemek stílusait. Ez elengedhetetlen az interaktív weboldalak létrehozásához.
A DOM és a JavaScript: A DOM manipulálásának lehetőségei JavaScripttel
A DOM (Document Object Model) egy programozási interfész HTML, XML és SVG dokumentumokhoz. Lényegében egy fán ábrázolt struktúra, amely a weboldal elemeit (pl. bekezdéseket, képeket, linkeket) csomópontokként kezeli. Ez a fa teszi lehetővé a JavaScript számára, hogy interakcióba lépjen a weboldal tartalmával és szerkezetével.
A JavaScript kulcsszerepet játszik a DOM manipulálásában. A JavaScript segítségével hozzáférhetünk a DOM fa bármely eleméhez, módosíthatjuk azok tartalmát, stílusát, attribútumait, és akár új elemeket is beszúrhatunk, vagy meglévőket törölhetünk.
Nézzük meg a leggyakoribb DOM manipulációs módszereket JavaScripttel:
- Elemek kiválasztása:
document.getElementById(id)
: Elem kiválasztása az ID alapján.document.getElementsByClassName(className)
: Elemek kiválasztása osztálynév alapján (tömböt ad vissza).document.getElementsByTagName(tagName)
: Elemek kiválasztása tag neve alapján (tömböt ad vissza).document.querySelector(selector)
: Az első elem kiválasztása, ami megfelel a CSS választónak.document.querySelectorAll(selector)
: Az összes elem kiválasztása, ami megfelel a CSS választónak (NodeList-et ad vissza).- Tartalom módosítása:
element.innerHTML
: Az elem HTML tartalmának beállítása vagy lekérdezése. Vigyázat, biztonsági kockázatot jelenthet!element.textContent
: Az elem szöveges tartalmának beállítása vagy lekérdezése.element.setAttribute(name, value)
: Egy attribútum értékének beállítása.element.getAttribute(name)
: Egy attribútum értékének lekérdezése.- Stílus módosítása:
element.style.propertyName
: Az elem inline stílusának módosítása. Például:element.style.color = "red";
element.classList.add(className)
: Osztály hozzáadása az elemhez.element.classList.remove(className)
: Osztály eltávolítása az elemről.element.classList.toggle(className)
: Osztály hozzáadása, ha nincs jelen, egyébként eltávolítása.- Új elemek létrehozása és beszúrása:
document.createElement(tagName)
: Új HTML elem létrehozása.document.createTextNode(text)
: Új szöveges csomópont létrehozása.element.appendChild(child)
: Egy elem hozzáadása egy másik elem végére.element.insertBefore(newNode, existingNode)
: Egy elem beszúrása egy másik elem elé.element.removeChild(child)
: Egy elem eltávolítása.
A DOM manipulálása lehetővé teszi, hogy a weboldalak dinamikusan reagáljanak a felhasználói interakciókra. Például, ha egy felhasználó egy gombra kattint, a JavaScript segítségével módosíthatjuk a weboldal tartalmát, megjeleníthetünk egy üzenetet, vagy elvégezhetünk egy számítást.
A DOM manipulációjának helyes és hatékony használata elengedhetetlen a modern, interaktív webalkalmazások fejlesztéséhez.
A teljesítmény szempontjából fontos, hogy a DOM manipulációt minimalizáljuk, mivel a gyakori DOM frissítések lassíthatják a weboldalt. Érdemes megfontolni a virtuális DOM használatát (pl. React, Vue.js keretrendszerekben), amely optimalizálja a DOM frissítéseket.
A DOM manipuláció során ügyelni kell a biztonságra is. A innerHTML
használata például lehetővé teszi a cross-site scripting (XSS) támadásokat, ha nem megfelelően kezeljük a felhasználótól származó adatokat.
Elemek kiválasztása a DOM-ban: `getElementById`, `getElementsByClassName`, `querySelector`, `querySelectorAll`
A DOM (Document Object Model) egy fa struktúra, ami a weboldal HTML dokumentumát reprezentálja. A JavaScript segítségével ezen a fán navigálhatunk és manipulálhatjuk az elemeket. Ehhez különböző módszereket használhatunk, melyek közül a leggyakoribbak az alábbiak:
getElementById
: Ez a módszer egyetlen elemet választ ki az azonosítója (id
attribútum) alapján. Az id
attribútum egyedi az oldalon, tehát ez a módszer mindig csak egy elemet ad vissza (vagy null
-t, ha nem talál elemet a megadott azonosítóval).
getElementsByClassName
: Ezzel a módszerrel egy adott osztálynévvel (class
attribútum) rendelkező összes elemet kiválaszthatjuk. Visszatérési értéke egy HTMLCollection, ami egy élő lista az elemekről. Ez azt jelenti, hogy ha a DOM változik, és új elemek kapják meg a megadott osztálynevet, a lista automatikusan frissül.
querySelector
: A querySelector
egyetlen elemet választ ki egy CSS szelektornak megfelelően. Ez a szelektornak megfelelő első elemet adja vissza. Ha nincs ilyen elem, akkor null
-t ad vissza. A CSS szelektorok segítségével sokkal komplexebb feltételek alapján is választhatunk elemeket, mint az id
vagy class
attribútumok.
querySelectorAll
: Hasonló a querySelector
-hez, de a querySelectorAll
a CSS szelektornak megfelelő *összes* elemet visszaadja egy NodeList-ben. A NodeList nem élő lista, mint a HTMLCollection, hanem egy statikus pillanatfelvétel a DOM-ról a metódus hívásának pillanatában.
A DOM-ban való eligazodás és az elemek kiválasztása elengedhetetlen a dinamikus weboldalak készítéséhez.
Például:
document.getElementById("myElement")
– Kiválasztja az „myElement” azonosítójú elemet.document.getElementsByClassName("myClass")
– Kiválasztja az összes „myClass” osztályú elemet.document.querySelector(".myClass")
– Kiválasztja az első „myClass” osztályú elemet.document.querySelectorAll("p")
– Kiválasztja az összes<p>
(paragrafus) elemet.
Ezek a módszerek kulcsfontosságúak a weboldal tartalmának dinamikus módosításához, a felhasználói interakciókra való reagáláshoz, és általánosságban a modern webfejlesztéshez.
Attribútumok kezelése a DOM-ban: Attribútumok lekérdezése, beállítása és eltávolítása

A DOM (Document Object Model) lehetővé teszi a weboldalak dinamikus kezelését. Ebben a kontextusban az attribútumok kezelése kulcsfontosságú szerepet játszik. Az attribútumok HTML elemekhez kapcsolódó tulajdonságok, amelyek befolyásolják azok viselkedését és megjelenését.
Az attribútumok lekérdezése a DOM-ban többféleképpen történhet. A legegyszerűbb módszer az getAttribute()
függvény használata, mely egy adott attribútum értékét adja vissza. Például, ha van egy <img>
elemünk id="myImage"
és src="image.jpg"
attribútumokkal, akkor a document.getElementById("myImage").getAttribute("src")
kóddal lekérdezhetjük a kép forrását.
Az attribútumok beállítása hasonlóan egyszerű. Az setAttribute()
függvény segítségével új értékeket adhatunk az attribútumoknak, vagy akár új attribútumokat is létrehozhatunk. Például, a document.getElementById("myImage").setAttribute("alt", "Egy leírás a képről")
beállítja az alt
attribútumot.
Az attribútumok dinamikus módosítása lehetővé teszi a felhasználói interakciókra való reagálást és a weboldal tartalmának valós idejű változtatását.
Az attribútumok eltávolítása is fontos lehet bizonyos esetekben. Az removeAttribute()
függvény eltávolítja a megadott attribútumot az adott elemről. Például, a document.getElementById("myImage").removeAttribute("alt")
eltávolítja az alt
attribútumot a myImage
azonosítójú elemről.
Fontos megjegyezni, hogy az attribútumok értékei mindig szöveges formában kerülnek tárolásra. Ha numerikus értékkel dolgozunk, akkor azt konvertálnunk kell a megfelelő típusra JavaScript-ben.
Például, ha egy <div>
elemnek van egy data-count
attribútuma, mely egy számot tárol, akkor a lekérdezés után a parseInt()
vagy parseFloat()
függvényekkel alakíthatjuk át számmá.
Elemek létrehozása és beszúrása a DOM-ba: `createElement`, `appendChild`, `insertBefore`
A Document Object Model (DOM) lehetővé teszi számunkra, hogy a weboldalaink tartalmát dinamikusan módosítsuk JavaScript segítségével. Az elemek létrehozása és beszúrása a DOM-ba kulcsfontosságú része ennek a folyamatnak. Ehhez a createElement
, appendChild
és insertBefore
metódusokat használhatjuk.
A createElement
metódus egy új HTML elemet hoz létre a memóriában. Például, ha egy új bekezdést szeretnénk létrehozni, a következő kódot használhatjuk:
const newParagraph = document.createElement('p');
Ez a kód nem helyezi el azonnal az új bekezdést a weboldalon; csak a memóriában létezik. Ahhoz, hogy megjelenítsük, be kell szúrnunk a DOM-ba.
Az appendChild
metódus egy elemet egy másik elem végére fűz. Például, ha a newParagraph
-ot a body
elem végére szeretnénk szúrni, a következőképpen tehetjük meg:
document.body.appendChild(newParagraph);
Most már a newParagraph
látható a weboldalon, feltéve, hogy van benne tartalom. A tartalom hozzáadásához a textContent
vagy a innerHTML
tulajdonságokat használhatjuk:
newParagraph.textContent = 'Ez egy új bekezdés!';
A insertBefore
metódus lehetővé teszi, hogy egy elemet egy másik elem elé szúrjunk be. Ehhez két argumentumra van szükség: az új elemre és arra az elemre, amely elé be szeretnénk szúrni az újat. Például, ha a newParagraph
-ot a body
elem első gyermekeleme elé szeretnénk szúrni, a következőképpen tehetjük meg:
document.body.insertBefore(newParagraph, document.body.firstChild);
A
insertBefore
metódus nagy előnye, hogy pontosan meghatározhatjuk, hova kerüljön az új elem a DOM-ban.
A fenti módszerek kombinálásával bármilyen komplex struktúrát létrehozhatunk és módosíthatunk a weboldalunkon.
Például, ha egy új listaelemet szeretnénk létrehozni és egy létező lista végére fűzni:
- Létrehozzuk az új listaelemet (
createElement('li')
). - Beállítjuk a tartalmát (
textContent
). - Megkeressük a létező listát a DOM-ban (pl.
document.getElementById('myList')
). - Az
appendChild
metódussal a lista végére fűzzük az új elemet.
Ezek a módszerek alapvetőek a dinamikus weboldalak fejlesztéséhez, és a JavaScript keretrendszerek és könyvtárak is gyakran használják őket a háttérben.
Elemek eltávolítása a DOM-ból: `removeChild`, `remove`
A DOM (Document Object Model) lehetővé teszi a JavaScript számára, hogy interakcióba lépjen a HTML dokumentumokkal. Ennek részeként, az elemek eltávolítása is egy gyakori feladat.
Két fő módszer létezik elem eltávolítására:
removeChild()
: Ez a módszer egy szülőcsomóponton hívható meg, és eltávolítja a megadott gyermekcsomópontot. Tehát először meg kell szereznünk a szülőelemet, majd ezen keresztül távolíthatjuk el a gyermeket.remove()
: Ez a módszer közvetlenül az eltávolítandó elemen hívható meg. Egyszerűbb, mint aremoveChild()
, mivel nem szükséges a szülőelemhez hozzáférnünk.
Példa removeChild()
használatára:
Ha van egy <div id="szulo">
elemünk, ami tartalmaz egy <p id="gyerek">
elemet, akkor a következőképpen távolíthatjuk el a gyereket:
let szulo = document.getElementById("szulo");
let gyerek = document.getElementById("gyerek");
szulo.removeChild(gyerek);
Példa remove()
használatára:
Ugyanezt az eredményt érhetjük el egyszerűbben a remove()
segítségével:
let gyerek = document.getElementById("gyerek");
gyerek.remove();
A
remove()
módszer modernebb és kényelmesebb aremoveChild()
-nál, mivel közvetlenül az eltávolítandó elemen hívható meg.
Mindkét módszer hatására az elem eltűnik a DOM-ból, és a böngésző nem jeleníti meg tovább.
Eseménykezelés a DOM-ban: Eseményfigyelők hozzáadása és eltávolítása
A DOM (Document Object Model) kulcsfontosságú a webfejlesztésben, hiszen lehetővé teszi a JavaScript számára, hogy interakcióba lépjen a HTML dokumentummal. Az eseménykezelés a DOM-ban elengedhetetlen része a dinamikus weboldalak létrehozásának.
Az eseményfigyelők (event listeners) azok a mechanizmusok, amelyekkel a JavaScript kódot összekapcsoljuk bizonyos HTML elemekhez kapcsolódó eseményekkel (pl. kattintás, egérmozgás, űrlap elküldése). Amikor egy ilyen esemény bekövetkezik, a hozzárendelt függvény (az eseménykezelő) automatikusan lefut.
Eseményfigyelőt a addEventListener()
metódussal adhatunk hozzá egy DOM elemhez. Ez a metódus három paramétert vár: az esemény típusát (pl. „click”), az eseménykezelő függvényt, és egy opcionális harmadik paramétert, amely a buborékolás vagy a rögzítés fázisát szabályozza. Például:
const gomb = document.getElementById('myButton');
gomb.addEventListener('click', function() {
alert('A gombra kattintottak!');
});
Ebben a példában a „click” eseményhez rendeltünk egy névtelen függvényt a „myButton” ID-jű gombelemhez. Amikor a felhasználó a gombra kattint, az alert ablak megjelenik.
Az eseményfigyelők eltávolítása a
removeEventListener()
metódussal történik. Ennek a metódusnak ugyanazokat a paramétereket kell megkapnia, mint azaddEventListener()
-nek, beleértve a pontosan ugyanazt a függvényt, amelyet el szeretnénk távolítani. Ez azért fontos, mert a JavaScript a függvényeket referenciák alapján kezeli.
Fontos, hogy az addEventListener()
-nek átadott eseménykezelő függvényt tároljuk egy változóban, ha később el szeretnénk távolítani. Például:
function kattintasKezelo() {
alert('A gombra kattintottak!');
}
const gomb = document.getElementById('myButton');
gomb.addEventListener('click', kattintasKezelo);
// Később az eseményfigyelő eltávolítása:
gomb.removeEventListener('click', kattintasKezelo);
Ha nem tároljuk a függvényt, akkor nem tudjuk eltávolítani az eseményfigyelőt, mert a removeEventListener()
nem fogja azonosítani a korábban hozzáadott névtelen függvényt.
Az eseménykezelés a DOM-ban lehetővé teszi a dinamikus és interaktív weboldalak létrehozását, ahol a felhasználói interakciókra reagálva változtathatjuk a tartalom megjelenítését és viselkedését.
A DOM frissítése és a teljesítmény: Hogyan optimalizálható a DOM manipuláció?

A DOM manipuláció a webfejlesztés egyik teljesítménykritikus területe. Minden egyes DOM módosítás (például egy elem létrehozása, törlése vagy attribútumának megváltoztatása) a böngészőben újraszámítást és újrarajzolást válthat ki. Ezek a műveletek erőforrásigényesek lehetnek, különösen összetett weboldalakon, és jelentősen befolyásolhatják az oldal válaszidejét és a felhasználói élményt.
A DOM frissítésének optimalizálására számos technika létezik:
- Minimalizáld a közvetlen DOM manipulációt: Ahelyett, hogy minden egyes változtatást külön-külön hajtanál végre a DOM-on, gyűjtsd össze a módosításokat, és egyszerre hajtsd végre őket. Ez csökkenti a böngésző által végzett újraszámítások és újrarajzolások számát.
- Használj DOM fragmenteket: A DOM fragment egy „könnyűsúlyú” dokumentum objektum, amely nem része a tényleges DOM-nak. Létrehozhatsz egy DOM fragmentet, ezen belül elvégezheted a módosításokat, majd a fragmentet egyetlen művelettel illesztheted be a DOM-ba.
- Cache-eld a DOM elemeket: Ha egy DOM elemet többször is használsz, tárold el egy változóban, hogy ne kelljen minden alkalommal újra lekérdezned.
- Kerüld a felesleges újrarajzolást (reflow): Bizonyos DOM műveletek (például a `offsetWidth` vagy `offsetHeight` lekérdezése) azonnali újrarajzolást kényszerítenek ki. Próbáld meg elkerülni ezeket a műveleteket, vagy tárold el az eredményüket, hogy ne kelljen újra lekérdezni őket.
- Használd a `requestAnimationFrame` függvényt: Ez a függvény lehetővé teszi, hogy a DOM frissítéseket a böngésző következő újrarajzolása előtt ütemezd be, így elkerülheted a felesleges újrarajzolásokat.
A modern JavaScript keretrendszerek és könyvtárak (például React, Angular, Vue.js) virtuális DOM-ot használnak, amely egy memóriában tárolt reprezentációja a DOM-nak. Ezek a keretrendszerek a virtuális DOM-ban végzik a változtatásokat, majd összehasonlítják a virtuális DOM aktuális és előző állapotát, és csak a szükséges módosításokat hajtják végre a tényleges DOM-on. Ez jelentősen javíthatja a teljesítményt.
A hatékony DOM manipuláció elengedhetetlen a gyors és reszponzív webalkalmazások létrehozásához.
A DOM frissítések helytelen kezelése és a nem optimális kódolási gyakorlatok lassú weboldalakhoz vezethetnek, ami frusztráló felhasználói élményt eredményez.
Virtuális DOM: A React és más keretrendszerek DOM-hoz való viszonya
A virtuális DOM (Virtual DOM) egy programozási koncepció, amelyet a teljes DOM frissítésének optimalizálására használnak, különösen olyan keretrendszerekben, mint a React, Vue.js és mások. A klasszikus DOM manipuláció gyakran lassú és erőforrásigényes lehet, mivel minden változtatás közvetlenül a böngésző DOM-jában történik, ami újraszínezést (repaint) és újrafolyatást (reflow) válthat ki.
A virtuális DOM egy könnyűsúlyú, memóriában tárolt reprezentációja a valódi DOM-nak. Amikor egy alkalmazás állapotában változás történik, a keretrendszer először frissíti a virtuális DOM-ot. Ezután a virtuális DOM-ot összehasonlítja a korábbi verziójával, hogy meghatározza, mely részek változtak. Ezt a folyamatot „diffing”-nek nevezik.
Miután a változásokat azonosították, a keretrendszer csak a valóban megváltozott DOM elemeket frissíti. Ez a szelektív frissítés jelentősen javíthatja az alkalmazás teljesítményét, különösen komplex felhasználói felületek esetén.
A React működése a virtuális DOM-mal:
- Amikor egy React komponens állapota megváltozik, a
render()
metódus újra fut, és egy új virtuális DOM fát hoz létre. - A React összehasonlítja ezt az új fát a korábbi virtuális DOM fával.
- A React algoritmus meghatározza a különbségeket, és létrehoz egy „patch”-et, ami a valódi DOM-on végrehajtandó változtatások listája.
- Végül, a React a patch-et alkalmazza a valódi DOM-ra, minimalizálva a közvetlen DOM manipulációt.
Más keretrendszerek, mint például a Vue.js, hasonló elveket alkalmaznak a virtuális DOM használatával. A Vue.js is diffing algoritmust használ a változások azonosítására és csak a szükséges frissítések elvégzésére.
A virtuális DOM lényege, hogy a DOM manipuláció költséges művelet, ezért minimalizálni kell a közvetlen interakciót vele.
A virtuális DOM használatának előnyei:
- Teljesítmény javulás: A szelektív DOM frissítések csökkentik a böngésző terhelését.
- Egyszerűbb fejlesztés: A fejlesztők az alkalmazás állapotára koncentrálhatnak, a keretrendszer pedig gondoskodik a DOM frissítéséről.
- Keresztplatformos kompatibilitás: A virtuális DOM absztrakció lehetővé teszi, hogy a kód különböző környezetekben fusson.
Bár a virtuális DOM jelentős teljesítményjavulást eredményezhet, nem old meg minden teljesítményproblémát. A nem hatékony algoritmusok vagy a túl nagy komponensek még mindig lassíthatják az alkalmazást. A profiling és a teljesítmény optimalizálás továbbra is fontos része a webfejlesztésnek.
Shadow DOM: Encapsulation és komponens alapú fejlesztés
A Shadow DOM egy web szabvány, amely lehetővé teszi a DOM fa részek elkülönítését a fő dokumentumtól. Lényegében egy miniatűr DOM fát hoz létre egy elem belsejében, amely teljesen független a külső DOM-tól. Ezt hívjuk enkapszulációnak.
Az enkapszuláció lényege, hogy a Shadow DOM-ban lévő stílusok és szkriptek nem befolyásolják a külső DOM-ot, és fordítva. Ez azt jelenti, hogy a Shadow DOM-ban használhatunk tetszőleges CSS osztályokat és JavaScript változókat anélkül, hogy aggódnunk kellene a névtérütközések miatt. Ez különösen hasznos komponens alapú webfejlesztésben, ahol a komponensek önállóan működnek, és nem zavarják egymást.
A Shadow DOM-ot egy shadow host elemhez csatoljuk. Ez az elem a gyökere a Shadow DOM-nak. A Shadow DOM-ot a attachShadow()
metódussal hozzuk létre. Például:
const element = document.querySelector('#my-element');
const shadowRoot = element.attachShadow({mode: 'open'});
shadowRoot.innerHTML = '<p>Ez egy Shadow DOM-ban lévő szöveg.</p>';
A mode
paraméter meghatározza, hogy a Shadow DOM hozzáférhető-e a külső JavaScript kód számára. Ha open
, akkor a külső kód a shadowRoot
tulajdonságon keresztül hozzáférhet a Shadow DOM-hoz. Ha closed
, akkor nem.
A Shadow DOM lehetővé teszi a valódi, újra felhasználható webkomponensek létrehozását, amelyek önállóan működnek és nem függenek a külső környezettől.
A Shadow DOM használata számos előnnyel jár a webfejlesztésben:
- Enkapszuláció: A komponensek stílusai és szkriptjei el vannak szigetelve a külső kódtól.
- Újrafelhasználhatóság: A komponensek könnyen újra felhasználhatók különböző projektekben.
- Egyszerűbb karbantartás: A komponensek önállóan karbantarthatók, anélkül, hogy a többi kódot befolyásolnák.
A Shadow DOM egy hatékony eszköz a modern webfejlesztésben, amely lehetővé teszi a robosztusabb és könnyebben karbantartható alkalmazások létrehozását.
DOM biztonsági szempontok: Cross-Site Scripting (XSS) megelőzése
A DOM manipulációja a webfejlesztés alapvető része, de jelentős biztonsági kockázatot is hordoz magában, különösen a Cross-Site Scripting (XSS) támadások esetén. Az XSS lehetővé teszi támadóknak, hogy rosszindulatú szkripteket injektáljanak a weboldalakba, melyek a felhasználók böngészőjében futnak.
A DOM-on keresztül történő XSS megelőzése kulcsfontosságú. A leggyakoribb módszer a felhasználói bemenet megfelelő validálása és kódolása. Ez azt jelenti, hogy a felhasználótól származó adatokat, mielőtt a DOM-ba kerülnének, szigorúan ellenőrizni kell, és a potenciálisan veszélyes karaktereket (pl. <
, >
, "
, '
) kódolni kell.
A DOM-ba közvetlenül beillesztett, validálatlan felhasználói bemenet szinte biztosan XSS sérülékenységet eredményez.
Ne használjunk olyan DOM manipulációs módszereket, mint a innerHTML
, ha nem feltétlenül szükséges. Ezek a módszerek lehetővé teszik a HTML kód közvetlen beillesztését, ami nagyban növeli az XSS kockázatát. Ehelyett részesítsük előnyben a biztonságosabb alternatívákat, mint például a textContent
(szöveges tartalom beállításához) vagy a createElement
és appendChild
(új elemek létrehozásához és hozzáadásához).
A Content Security Policy (CSP) egy további védelmi réteg, amely meghatározza, hogy milyen forrásból származó szkriptek futhatnak a weboldalon. A CSP helyes konfigurálása jelentősen csökkentheti az XSS támadások sikerességét, még akkor is, ha más védelmi intézkedések valamilyen oknál fogva kudarcot vallanak.
Példák a megelőzésre:
- Bemeneti adatok validálása: Ellenőrizzük a felhasználói bemenetet a szerver oldalon és a kliens oldalon is.
- Kimeneti adatok kódolása: Kódoljuk a felhasználói bemenetet, mielőtt a DOM-ba illesztenénk.
- CSP használata: Konfiguráljuk a Content Security Policy-t a szkriptek forrásának korlátozására.
DOM API-k: Böngésző által biztosított interfészek és objektumok

A DOM (Document Object Model) API-k a böngészők által biztosított interfészek és objektumok gyűjteménye, amelyek lehetővé teszik a webfejlesztők számára, hogy interakcióba lépjenek a HTML és XML dokumentumok tartalmával és szerkezetével. Ezek az API-k kulcsfontosságúak a dinamikus weboldalak létrehozásához.
A DOM API-k segítségével a fejlesztők hozzáférhetnek a dokumentum elemeihez, módosíthatják azok tartalmát, stílusát és attribútumait, valamint új elemeket hozhatnak létre és szúrhatnak be a dokumentumba. Mindez JavaScript kód segítségével valósul meg.
Néhány alapvető DOM API:
document.getElementById()
: Egy adott ID-vel rendelkező elemet keres meg.document.querySelector()
ésdocument.querySelectorAll()
: CSS szelektorok segítségével keres elemeket.element.innerHTML
: Az elem HTML tartalmának lekérdezésére vagy beállítására szolgál.element.setAttribute()
éselement.getAttribute()
: Elemek attribútumainak beállítására és lekérdezésére szolgál.element.addEventListener()
: Eseménykezelők hozzáadására szolgál, lehetővé téve a felhasználói interakciókra való reagálást.
A DOM API-k elengedhetetlenek a felhasználói interakciókra reagáló, dinamikus webalkalmazások fejlesztéséhez.
Az Event Listener (eseményfigyelő) egy különösen fontos része a DOM API-nak. Lehetővé teszi, hogy a weboldal reagáljon a felhasználói műveletekre, például kattintásokra, billentyűleütésekre vagy egérmozgásokra. Az eseményfigyelők hozzárendelése az elemekhez JavaScript kóddal történik, és amikor egy adott esemény bekövetkezik, a hozzárendelt függvény (az eseménykezelő) lefut.
A DOM API-k használata lehetővé teszi a weboldalak számára, hogy változzanak a felhasználói interakciók hatására, anélkül, hogy újra be kellene tölteni az egész oldalt. Ez jelentősen javítja a felhasználói élményt és lehetővé teszi a komplex webalkalmazások fejlesztését.