Ebben a leckében megnézzük, mi az a DOM, miért van rá szükség, és hogyan épül fel.
Mi az a DOM?
A böngészőnek, amikor lekér egy oldalt, és válaszul megkapja a HTML forráskódját a szervertől, először elemeznie kell azt. A HTML-kód elemzése és elemzése során a böngésző DOM-fát épít ez alapján.
Ezen és számos egyéb művelet végrehajtása után a böngésző folytatja az oldal megjelenítését. Ebben a folyamatban természetesen már az általa létrehozott DOM-fát használja, nem az eredeti HTML-t.
A DOM az a dokumentumobjektum-modell, amelyet a böngésző a szervertől kapott HTML-kód alapján hoz létre a számítógép memóriájában.
Egyszerűen fogalmazva, a HTML kód egy oldal szövege, a DOM pedig a kapcsolódó objektumok halmaza, amelyet a böngésző hoz létre a szöveg elemzésekor.
A Chrome-ban a böngésző által fogadott oldal forráskódja a „Webfejlesztői eszközök” panel „Forrás” lapján tekinthető meg.
A Chrome-ban nincs olyan eszköz, amellyel meg lehetne tekinteni az általa létrehozott DOM-fát. De ennek a DOM-fának van egy HTML-kód formájában történő ábrázolása, amely az "Elemek" fülön érhető el. Ez a DOM-ábrázolás természetesen sokkal kényelmesebb a webfejlesztők számára. Ezért nincs olyan eszköz, amely a DOM-ot fastruktúra formájában ábrázolná.
Az objektumok ebben a modellben szinte mindenből jönnek létre, ami a HTML-ben található (címkék, szöveges tartalom, megjegyzések stb.), beleértve magát a dokumentumot is. A modellben szereplő objektumok közötti kapcsolatok a hogyan alapján alakulnak ki A HTML elemek egymáshoz képest helyezkednek el a kódban.
Ebben az esetben a dokumentum létrehozása utáni DOM-ja módosítható. Amikor a DOM megváltozik, a böngésző szinte azonnal újrarajzolja az oldal képét. Ennek eredményeként megvan Az oldal megjelenítése mindig megfelel a DOM-nak.
A DOM programozott olvasásához és módosításához a böngésző DOM API-t vagy más szóval programozói felületet biztosít számunkra. Egyszerű módon a DOM API rengeteg különböző objektum gyűjteménye, tulajdonságaik és metódusaik, amelyeket felhasználhatunk a DOM olvasása és módosítása.
A DOM-mal való együttműködéshez a legtöbb esetben JavaScriptet használnak, mert. a mai napig ez az egyetlen programozási nyelv, amelyen a szkriptek böngészőben futtathatók.
Miért van szükségünk DOM API-ra? Szükségünk van rá, hogy a JavaScript segítségével menet közben tudjuk változtatni az oldalt, azaz. dinamikussá és interaktívvá teszi.
A DOM API biztosítja számunkra (fejlesztők) nagy mennyiség módszerek, amelyekkel mindent megváltoztathatunk az oldalon, valamint interakcióba léphetünk a felhasználóval. Azok. ez a programozási felület lehetővé teszi összetett felületek, űrlapok létrehozását, felhasználói műveletek feldolgozását, hozzáadását és eltávolítását különféle elemek az oldalon módosíthatja azok tartalmát, tulajdonságait (attribútumait) és még sok mást.
A weben gyakorlatilag nincsenek olyan oldalak, amelyek szkriptjében ne működnének a DOM-mal.
Mi az oldal HTML kódja?
Mielőtt elkezdené a dokumentumobjektum-modell tanulmányozását, először emlékeznie kell arra, hogy mi a weboldal (HTML dokumentum) forráskódja.
A weboldal forráskódja címkékből, attribútumokból, megjegyzésekből és szövegekből áll. A címkék a HTML alapvető szintaxisa. Legtöbbjük párban. Ebben az esetben az egyik a nyitó, a másik a záró. Az egyik ilyen címkepár HTML elemet alkot. A HTML elemek rendelkezhetnek Extra lehetőségek- attribútumok.
Egy bizonyos jelölés létrehozására szolgáló dokumentumban egyes elemek másokon belül vannak. Ennek eredményeként egy HTML-dokumentum beágyazott HTML-elemek halmazának tekinthető.
Példaként vegye figyelembe a következő HTML-kódot:
Cikk címe
Cikk szakasz
Cikk tartalma
Ebben a kódban a gyökérelem a html . A fej és a test elemek benne vannak egymásba ágyazva. A head elem tartalmazza a címet , míg a body elem h1 és div . A div elem viszont tartalmazza a h2-t és a p-t.
Most nézzük meg, hogyan építi fel a böngésző a DOM-fát a HTML kód alapján.
Hogyan épül fel a dokumentum DOM fája?
Ahogy fentebb már leírtuk, a böngésző HTML-elemek és egyéb entitások alapján épít egy fát. forráskód oldalakat. Ennek a folyamatnak a végrehajtása során figyelembe veszi az elemek egymásba ágyazását.
Ennek eredményeként a böngésző nem csak a munkájában használja a kapott DOM-fát, hanem API-t is biztosít számunkra kényelmes működés azzal JavaScript-en keresztül.
A DOM felépítése során a böngésző objektumokat hoz létre HTML elemekből, szövegekből, megjegyzésekből és ennek a nyelvnek az egyéb entitásaiból ( DOM csomópontok-fák).
A webfejlesztőket a legtöbb esetben csak a HTML elemekből kialakított objektumok (csomópontok) érdeklik.
Ugyanakkor a böngésző nemcsak objektumokat hoz létre HTML-elemekből, hanem bizonyos kapcsolatokkal összekapcsolja azokat egymással, attól függően, hogy a kódban hogyan viszonyulnak a másikhoz.
Azok az elemek, amelyek közvetlenül az elemben vannak, annak gyermekei. És ő mindegyikük szülője. Ráadásul ezek az elemek egymáshoz képest testvérek (testvérek).
Ezenkívül a HTML-ben minden elemnek mindig van egy szülője (az a HTML-elem, amelyben közvetlenül található). A HTML-ben egy elemnek nem lehet több szülője. Az egyetlen kivétel a html elem. Nincs szülője.
Ahhoz, hogy a DOM-fát úgy kapjuk meg, ahogy a böngésző felállítja, csak „el kell rendezni” az összes elemet az egymáshoz való viszonyuk függvényében.
A DOM fa létrehozása fentről lefelé történik.
A DOM-fa gyökere mindig maga a dokumentum (a dokumentum csomópontja). Továbbá a fa a HTML kód szerkezetétől függően épül fel.
Például a fent megnézett HTML-kód a következő DOM-fával rendelkezik:
A fa legtetején található a dokumentum csomópont. Ez a csomópont a html-hez van társítva, ez a gyermeke. A html csomópontot a html elem ( ...). Fej csomópontok (
...) és a test ( ...) szülője html . Egymáshoz képest testvérek, mert van egy szülője. A fejcsomópont a címhez van társítva (lt;title>...), ő az ő gyermeke. A h1 és div csomópontok a testhez kapcsolódnak, számukra ez a szülő. A div csomópont a h2 (...
) és p(), ezek a gyermekei.A fa, amint fentebb megjegyeztük, az objektum (csomópont) dokumentumból indul. Ennek viszont van egy gyermek csomópontja, amelyet a html elem ( ...). fejelemek (
...) és a test ( ...) html-ben találhatók, és ezért a gyermekei. Ezután a fejcsomópont a cím szülője (lt;title>...). A h1 és div elemek a törzsben vannak beágyazva, ami azt jelenti, hogy a törzs gyermekei. A div közvetlenül tartalmazza a h2 elemeket (...
) és p(). Ez azt jelenti, hogy mindegyik div csomópontja a szülő.A DOM fa egyszerűen így épül fel a böngészőben a HTML kód alapján.
Miért kell tudnia, hogyan épül fel egy DOM-fa? Először is, ez annak a környezetnek a megértése, amelyben változtatni szeretne. Másodszor, a DOM-mal végzett munka során a legtöbb művelet a szükséges elemek megtalálásán (kiválasztásán) múlik. A DOM fa elrendezésének és a csomópontok közötti kapcsolatok ismerete nélkül meglehetősen nehéz lesz egy adott elemet megtalálni benne.
Gyakorlat
Az ábrán látható DOM fa alapján hozza létre a HTML kódot.
A hivatkozás tartalmazza a szabványos beépített JavaScript objektumok összes tulajdonságának és metódusának leírását.
Dokumentum objektum modell
Dokumentum objektum modell(Document Object Model, DOM) egy alkalmazásprogramozási felület (API) az XML-hez, amelyet kibővítettek a HTML-lel is.
A DOM-ban az összes oldaltartalom (elemek és szöveg) csomópontok hierarchiájaként jelenik meg. Vegye figyelembe a következő kódot:
Helló Világ!
Ez a kód a DOM-mal mint csomópontok hierarchiájával ábrázolható:
Azáltal, hogy egy dokumentumot csomópontok faként ábrázol, a DOM API teljes ellenőrzést biztosít a fejlesztőknek a weboldal tartalma és szerkezete felett.
A DOM fastruktúrájának leírásakor a családfákból kölcsönzött terminológiát használjuk.
Így az adott csomópont felett közvetlenül elhelyezkedő csomópontot az adott csomópont szülőcsomópontjának nevezzük. A csomópont alatt egy szinttel elhelyezkedő csomópontokat a csomópont gyermekeinek nevezzük. Az azonos szinten lévő és azonos szülővel rendelkező csomópontokat testvéreknek vagy testvéreknek nevezzük. Az adott csomópont alatt tetszőleges számú szinttel elhelyezkedő csomópontokat a leszármazottaknak nevezzük. A szülőket, nagyszülőket és minden más csomópontot, amelyek egy adott csomópont felett tetszőleges számú szinttel helyezkednek el, őseinek nevezzük.
A DOM hivatkozás tartalmazza a Document, Element, Event és NodeList objektumok leírását, beleértve metódusaik és tulajdonságaik leírását:
BOM-könyvtár
A BOM (Browser Object Model – angol fordításban - Browser Object Model) hozzáférést biztosít a böngészőablakhoz, és lehetővé teszi annak és elemeinek kezelését.
A BOM objektumok hozzáférést biztosítanak a böngésző funkcióihoz a weboldal tartalmától függetlenül. A BOM témája egyszerre érdekes és összetett, mert a specifikáció hosszas hiánya miatt a böngészőgyártók szabadon bővítették a BOM-ot, ahogy jónak látták. Sok hasonló elem különböző böngészők, de facto szabványokká váltak, amelyeket a kölcsönös kompatibilitás érdekében a mai napig betartanak. A JavaScript ezen alapvető szempontjainak szabványosítása érdekében a W3C meghatározta a BOM alapvető elemeit a HTML5 specifikációjában.
Munka a DOM modellel
Minden Window objektumnak van egy tulajdonsága dokumentum A, amely egy dokumentum objektumra utal. Ez a dokumentum objektum nem önálló objektum. Ez a dokumentumobjektum-modell (DOM) néven ismert gazdag API központi objektuma, amely meghatározza a dokumentum tartalmának elérését.
A DOM áttekintése
Dokumentumobjektum-modell (DOM) egy alapvető alkalmazásprogramozási felület, amely lehetővé teszi a munkavégzést HTML tartalomés XML dokumentumokat. A DOM-alkalmazásprogramozási felület (API) nem különösebben bonyolult, de számos architekturális jellemzővel tisztában kell lennie.
Először is meg kell érteni, hogy a HTML- vagy XML-dokumentumok beágyazott elemei DOM-objektumok fájaként vannak ábrázolva. A HTML-dokumentum fanézete elemeket vagy címkéket képviselő csomópontokat tartalmaz, mint pl
ÉsÉs a szövegsorokat képviselő csomópontok. Egy HTML-dokumentum HTML-megjegyzéseket képviselő csomópontokat is tartalmazhat. Tekintsük a következő egyszerű HTML dokumentumot:
Ez egy HTML dokumentum
Példa egyszerű szöveg.
A dokumentum DOM-ábrázolása a következő ábrán látható:
Azoknak, akik még nem ismerik a faszerkezeteket számítógép programozás, hasznos tudni, hogy a leírásukra szolgáló terminológiát a családfákról kölcsönözték. A közvetlenül az adott csomópont feletti csomópontot hívják meg szülői ehhez a csomóponthoz képest. Azok a csomópontok, amelyek egy szinttel a másik csomópont alatt vannak leányvállalatok ehhez a csomóponthoz képest. Az azonos szinten lévő és azonos szülővel rendelkező csomópontokat hívják meg testvéri. A másik csomópont alatt tetszőleges számú szinttel elhelyezkedő csomópontok annak gyermekei. A szülő, a nagyszülő és a csomópont feletti egyéb csomópontok az ősei.
Ezen a diagramon minden téglalap egy dokumentum csomópont, amelyet az objektum képvisel csomópont. Felhívjuk figyelmét, hogy az ábra hármat mutat különféle típusok csomópontok. A fa gyökere a Dokumentum csomópont, amely a teljes dokumentumot reprezentálja. A HTML elemeket képviselő csomópontok Element típusú csomópontok, a szöveget képviselő csomópontok pedig Text típusúak. A Dokumentum, az Elem és a Szöveg a Node osztály alosztályai. A dokumentum és az elem a DOM két legfontosabb osztálya.
A csomópont típusa és altípusai alkotják az alábbi diagramon látható típushierarchiát. Vegye figyelembe az általános dokumentum- és elemtípusok, valamint a HTMLDocument és HTMLElement típusok közötti formai különbségeket. A Dokumentum típus egy HTML és XML dokumentumot jelöl, az Element osztály pedig ennek a dokumentumnak egy elemét. A HTMLDocument és HTMLElement alosztályok kifejezetten egy HTML dokumentumot és annak elemeit képviselik:
Ezen a diagramon is figyelemre méltó a HTMLElement osztály nagyszámú altípusa, amelyek a HTML elemek meghatározott típusait képviselik. Ezek mindegyike olyan JavaScript-tulajdonságokat határoz meg, amelyek egy adott elem vagy elemcsoport HTML-attribútumait tükrözik. Ezen speciális osztályok némelyike további tulajdonságokat vagy metódusokat határoz meg, amelyek nem tükrözik a HTML jelölőnyelv szintaxisát.
Dokumentumelemek kiválasztása
Többségi munka kliens programok tovább JavaScript valahogy a dokumentum elemeinek manipulálásához kapcsolódik. A végrehajtás során ezek a programok használhatják a dokumentum globális változót, amely a Dokumentum objektumra hivatkozik. Azonban ahhoz, hogy bármilyen manipulációt végrehajtson a dokumentum elemein, a programnak valamilyen módon meg kell szereznie vagy ki kell választania azokat az Elem objektumokat, amelyek a dokumentum ezen elemeire hivatkoznak. A DOM számos módot definiál az elemek kiválasztására. Kijelölhet egy dokumentum elemét vagy elemeit:
az id attribútum értékével;
a név attribútum értékével;
címkenév szerint;
a CSS-osztály vagy -osztályok neve alapján;
hogy megfeleljen egy adott CSS-választónak.
Mindezen elemkiválasztási technikák leírása a következő alfejezetekben található.
Elemek kiválasztása id attribútumérték alapján
Minden HTML elem rendelkezik id attribútumokkal. Az attribútum értékének egyedinek kell lennie a dokumentumon belül – ugyanabban a dokumentumban nem lehet két elemnek azonos azonosító attribútum értéke. A metódus használatával kiválaszthat egy elemet az id attribútum egyedi értéke alapján getElementById() Dokumentum objektum:
Var section1 = document.getElementById("szakasz1");
Ez a legegyszerűbb és leggyakoribb módja az elemek kiválasztásának. Ha a szkriptnek képesnek kell lennie a dokumentumelemek egy meghatározott halmazának manipulálására, rendeljen értékeket ezen elemek id attribútumaihoz, és használja azt a képességet, hogy ezek alapján keressen bennük.
Verziók internet böngésző IE8 alatt getElementById metódus() megkeresi az id attribútum értékeit kis- és nagybetűk megkülönböztetése nélkül, és visszaadja a name attribútum értékének megfelelő elemeket is.
Elemek kiválasztása a name attribútum értéke alapján
A HTML name attribútumot eredetileg az űrlapelemek elnevezésére szánták, és ennek az attribútumnak az értékét használták az űrlapadatok kiszolgálóhoz történő elküldésekor. Az id attribútumhoz hasonlóan a name attribútum is nevet rendel egy elemhez. Az id-vel ellentétben azonban a name attribútum értékének nem kell egyedinek lennie: egyszerre több elemnek is lehet ugyanaz a neve, ami rádiógomboknál és jelölőnégyzeteknél elég gyakori. Ezenkívül az id-vel ellentétben a name attribútum csak bizonyos HTML-elemeken adható meg, beleértve az űrlapokat, űrlapelemeket és elemeket.
A metódus segítségével kiválaszthatja a HTML elemeket a névattribútumuk értékei alapján getElementsByName() Dokumentum objektum:
Var radiobuttons = document.getElementsByName("kedvenc_szín");
A getElementsByName() metódust nem a Document osztály határozza meg, hanem a HTMLDocument osztály, így csak HTML dokumentumokban érhető el, XML dokumentumokban nem. Egy objektumot ad vissza NodeList, amely Element objektumok csak olvasható tömbjeként viselkedik.
Az IE-ben a getElementsByName() metódus olyan elemeket is visszaad, amelyek id attribútumértékei megegyeznek a megadott értékkel. A kompatibilitás biztosítása érdekében különböző verziók böngészőkben óvatosnak kell lennie az attribútumértékek kiválasztásával, és ne használja ugyanazokat a karakterláncokat a név és az azonosító attribútumértékeihez.
Elemek kiválasztása típus szerint
Módszer getElementsByTagName() A Dokumentum objektum lehetővé teszi az összes megadott típusú (vagy címkenév szerinti) HTML vagy XML elem kiválasztását. Például szerezzen be egy tömbszerű, csak olvasható objektumot, amely az összes elem elemobjektumait tartalmazza egy ilyen dokumentumban:
var spans = document.getElementsByTagName("span");
A getElementsByName() metódushoz hasonlóan a getElementsByTagName() egy NodeList objektumot ad vissza. A NodeList tömbben a dokumentumelemek abban a sorrendben kerülnek be, ahogyan a dokumentumban szerepelnek, azaz. első elem
A dokumentumban a következők közül választhat:
Var firstParagraph = document.getElementsByTagName("p");
A HTML-címkenevek nem tesznek különbséget a kis- és nagybetűk között, és ha a getElementsByTagName()-t egy HTML-dokumentumra alkalmazzák, akkor a címke nevével összehasonlítja a kis- és nagybetűket. Például a fent létrehozott spans változó is tartalmazni fogja az összes elemet , amelyek úgy vannak megírva .
A dokumentum összes elemét tartalmazó NodeList létrehozásához a "*" helyettesítő karaktert adja át a getElementsByTagName() metódusnak.
Ezenkívül az Element osztály a getElementsByTagName() metódust is meghatározza. Pontosan úgy működik, mint a Document osztályban lévő metódus verziója, de csak azokat az elemeket választja ki, amelyek a metódus meghívására szolgáló elem gyermekei. Vagyis keresse meg az összes elemet az első elem belsejében Ez a következőképpen lehetséges: Var firstParagraph = document.getElementsByTagName("p"); var firstParagraphSpans = firstParagraph.getElementsByTagName("span"); Történelmi okokból a HTMLDocument osztály speciális tulajdonságokat határoz meg bizonyos típusú csomópontok eléréséhez. Tulajdonságok képeket, formákÉs linkeket, például olyan objektumokra utal, amelyek csak olvasható, elemeket tartalmazó tömbökként viselkednek ,
A HTMLDocument objektum szinonim tulajdonságokat is meghatároz beágyazÉs bővítmények, amelyek a HTMLCollection elemek gyűjteményei