Documente Academic
Documente Profesional
Documente Cultură
O pagina web este structurata dintr-un document ce contine atat text cat si etichete HTML. DOM-ul sau
Document Object Model este standardizat ca fiind structura paginii.
● DOM este si un API ce permite interactiunea cu structura unei pagini web. Cu javascript, putem
accesa structura paginii afisat in browser si o putem modifica.
● DOM reprezinta o pagina web structurata pe obiecte ierarhice, unde fiecare obiect corespunde
nodului ramificat a elementelor sub forma unui copac.
● Variabila “document” acceseaza radacina DOM si corespunde cu elementele <html> in sine.
● Obiectele DOM au proprietati si metode care pot fi manipulate cu Javascript. De exemplu, tipul
nod returneaza informatii de tip nod, nodurile parinte continand o colectie de noduri copiii.
Introducere
Deja stim ca o pagina web este un document care contine etichete precum titluri, paragrafe, link-uri etc. si
texte.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>My web page</title>
</head>
<body>
<h1>My web page</h1>
<p>Hello! My name's Baptiste.</p>
<p>I live in the great city of <a href="https://en.wikipedia.org/wiki/Bor\
deaux">Bordeaux</a>.</p>
</body>
</html>
HTML defineste structura unei pagini web prin utilizarea de elemente in construirea blocurilor. HTML de
unul singur nu poate face ca o pagina web sa fie interactiva, din acest motiv avem nevoie de JavaScript.
• Nodurile care corespund elementelor HTML (cele albastre). Sunt denumite ca fiind elemente de tip
nod si pot avea la randul lor subnoduri, numite noduri copil sau copii.
• Nodurile care corespund continutului de tip text al paginii (cele rosii). Acestea sunt numite noduri
text si nu au copii.
Accesarea DOM-ului
Intr-un exemplu anterior v-am aratat cum sa accesati variabila “document” care ne returneaza intregul
document HTML sub forma unei structuri arborescente. Noi putem parcuge elementele din interiorul
acelei variante, cu ajutorul unor metode built-in si le putem modifica cu ajutorul unor proprietati.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>My web page</title>
</head>
<body>
<h1>My web page</h1>
<p class="text">Hello! My name's Baptiste.</p>
<p class="text">I live in the great city of <a href="https://en.wikipedia.org/wiki/Bor\
deaux" id="bordeauWebsite">Bordeaux</a>.</p>
<script src="script.js"></script>
</body>
</html>
• .getElementsByTagName() – cu ajutorul acestei metode putem selecta toate elementele din DOM
care au un tag anume. Tag-ul se va da ca si argument.
Exemplu:
Metoda a fost apelata pe variabila “document” si cu ajutorul ei am selectat toate elementele de tip
paragraf din pagina.
• .getElementsByClassName() – cu ajutorul acestei metode putem selecta toate elementele care au
o clasa anume. Clasa se va da ca si argument.
Exemplu:
Dupa cum putem observa am selectat toate elementele care contin clasa “text” si le-am memorat
intr-o variabila.
• .getElementByClassName() – functioneaza similar cu metoda anterioara, diferenta fiind ca
selecteaza primul element din pagina pe care-l gaseste si care contine acea clasa.
• .getElementById() – cu ajutorul acestei metode putem selecta elementul din pagina care are ID-ul
dat ca si argument.
Exemplu:
Putem observa ca atunci cand dorim selectarea unui id sau a unei clase trecem si simbolul sugestiv
unui id sau a unei clase.
Obtinerea informatiilor despre elemente
DOM ne ofera deja informatiile pe care le selectam. Sa spunem ca avem urmatorul document:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>My web page</title>
</head>
<body>
<h1>Seven wonders of the world</h1>
<p>Do you know the seven wonders of the world?</p>
<div id="content">
<h2>Wonders from Antiquity</h2>
<p>This list comes to us from ancient times.</p>
<ul class="wonders" id="ancient">
<li class="exists">Great Pyramid of Giza</li>
<li>Hanging Gardens of Babylon</li>
<li>Lighthouse of Alexandria</li>
<li>Statue of Zeus at Olympia</li>
<li>Temple of Artemis at Ephesus</li>
<li>Mausoleum at Halicarnassus</li>
<li>Colossus of Rhodes</li>
</ul>
<h2>Modern wonders of the world</h2>117
Traverse the DOM
<p>This list was decided by vote.</p>
<ul class="wonders" id="new">
<li class="exists">Petra</li>
<li class="exists">Great Wall of China</li>
<Li class="exists">Christ the Redeemer</Li>
<Li class="exists">Machu Picchu</Li>
<li class="exists">Chichen Itza</li>
<li class="exists">Colosseum</li>
<li class="exists">Taj Mahal</li>
</ul>
<h2>References</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Seven_Wonders_of_the_Ancie\
nt_World">Seven Wonders of the Ancient World</a></li>
<li><a href="https://en.wikipedia.org/wiki/New7Wonders_of_the_World">\
New Wonders of the World</a></li>
</ul>
</div>
<script src="script.js"></script>
</body>
</html>
Clase
O eticheta poate avea mai multe clase. Putem retrage toate clasele unui element cu ajutorul proprietatii
.classList.
Putem verifica daca un element detine o clasa prin apelarea metodei “.contains()”. In urma apelarii
metodei ni se va returna “true” sau “false”.
if (document.getElementById("ancient").classList.contains("wonders")) {
console.log("The element with ID 'ancient' has the class 'wonders'.");
} else {
console.log("The element with ID 'ancient' does not have the class 'wonders\
'.");
}
.style
Cu ajutorul proprietatii .style putem modifica inatisarea unui element HTML.
Exemplu:
https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style
Modificarea textului:
.textContent
Putem modifica textul dintr-un paragraf, titlu etc. cu ajutorul proprietatii .textContent
Exemplu:
.innerHTML
O alta proprietate pe care o putem folosi este innerHTML. Aceasta proprietate modifica sau returneaza
continutul HTML corespunzator unui tag sau a unei clase/id.
In exemplul de mai jos putem observa modificarile aduse prin folosirea .innerHTML
Primeste 2 argumente, primul fiind numele atributului si al doilea fiind valoarea lui.
Modificarea claselor
Putem adauga o noua clasa unui element cu ajutorul metodei “.add()”. Intre paranteze vom adauga
numele clasei pe care vrem sa o adaugam elementului. Numele clasei va fi intre ghilimele.
Am aplicat metoda .add() variabilei classes in care este stocata proprietatea elementului cu id-ul
“ancient”.
Daca putem adauga o clasa inseamna ca putem si sa stergem una. Putem realiza asta cu ajutorul metodei
“.remove()” care primeste ca si argument clasa pe care dorim sa o stergem.
Sa spunem ca avem un buton “Apasa-ma”. Vreau ca el sa-si schimbe culoarea daca este apasat o data si
daca il apas pentru a doua oara sa revina la culoarea initiala. Putem realiza acest efect foarte usor cu
ajutorul metodei “.toggle()”.
Atunci cand apelam metoda “.toggle()”. Ea verifica daca un element are clasa data ca si argument, in
cazul in care clasa nu exista pe acel element ea va fi pusa si in cazul in care ea exista pe acel element ea va
fi stearsa. In mod normal aceasta metoda este folosita in concordanta cu eventurile, despre ele vom vorbi
intr-o sedinta viitoare, dar este bine sa stiti ca exista si aceasta metoda.
classes.toggle("start");
Am observat ca putem modifica informatii afisate in pagina cu ajutorul proprietatilor si metodelor insa
putem modifica si structura unei pagini cu ajutorul metodelor.
• creatTextNode()
• createElement()
• appendChild()
• insertBefore()
• insertAdjacentHTML()
• replaceChild()
• removeChild()
Crearea elementului:
Putem crea un element folosind metoda “.createElement()”. Aceasta metoda este folosita asupra
obiectului document. Metoda primeste ca si argument tagul elementului pe care vrem sa-l cream. Ea
returneaza elementul creat sub forma unui obiect, pe care-l memoram intr-o variabila.
// ...
pythonElement.id = "python";
// Define element ID
pythonElement.textContent = "Python";
In exemplul nostru, elementul parinte este “ul” care se identifica prin ajutorul id-ului “languages”:
// ...
document.getElementById("languages").appendChild(pythonElement); // Insert the new element into the DOM
Putem folosi metoda createTextNode() pentru a adauga un nod textual, aceasta metoda o putem folosi in
locul proprietatii .textContent.
Acest exemplu demonstreaza posibilitatea inserarii unui text la finalul nodului parinte:
Aceasta metoda permite alegerea mai multor locatii unde sa fie inserat noul element:
• Before begin
• After begin
• Before end
• After end
document.querySelector("h3").setAttribute("id", "title");
/*
<!-- beforebegin -->
<p>
<!-- afterbegin -->
foo
<!-- beforeend -->
</p>
<!-- afterend -->
Urmatorul exemplu foloseste insertAdjacentHTML() pentru a adauga Javascript in partea de sus a limbajului
Modificare structurii paginii
*/
// Add an element to the beginning of a list
document.getElementById('languages').insertAdjacentHTML("afterBegin", '<li id\
="javascript">JavaScript</li>');
Un element poate fi inlocuit cu ajutorul metodei replaceChild(). In exemplul urmator demonstram cum
inlocuim “Perl” cu “Lisp”.
Performanta
Actualizand DOM-ul prin JavaScript duce la modificarile de tip compute catre noua pagina afisata.
Manipularile frecvente pot duce la incetinirea paginii si la scaderea performantei. Pentru a rezolva aceste
probleme trebuie sa accesam DOM-ul facand cat mai putine operatii.
O metoda este setarea proprietatilor pentru element inainte ca acesta sa fie inserat in DOM, acest lucru ne
ofera o performanta mai buna.