HTML DOM Juurdepääs Liidestele
HTML DOM abil saavutame juurdepääsu igale liidesele Html dokumendis.
Juurdepääsu võimalused:
- Kasutatakse getElementByld() meetodit
- Kasutatakse getElementsByTagname() meetodit
- Navigeerides liidestes kasutades nende omavahelist seost
getElementById() Meetod
getElementById() meetod pöördub elemendi poole määratud id abil.
Kirjaviis e. süntaks on selline:
document.getElementById("mingiID");
Proovi ise:
Pane tähele: getElementById() meetod ei tööta XML'is.
getElementsByTagName() Meetod
getElementsByTagName() meetod kasutab kõiki elemente määratud märgise abil.
Kirjaviis e. süntaks on selline:
node.getElementsByTagName("märgise nimi");
Näide 1
Allpool olevas näites nodeList kasutab kõiki <p> elemente dokumendis:
document.getElementsByTagName("p");
Proovi ise:
Näide 2
Järgnevas näites nodeList kasutab kõiki <p> elemente mis on elemendi id="pea" järglased:
document.getElementById('main').getElementsByTagName("p");
Proovi ise:
DOM Liideste Kollektsioon
getElementsByTagName() meetod kogub liidesed. Allpool olevas näites kirjutatud kood kollektsioneerib <p> liidesed muutujasse x.
x=document.getElementsByTagName("p");
x'is asuvale <p> elemendile juurdepääs on võimalik numbrilise viite e. indeksi abil. Teisele <p> elemendile avab juurdepääsu selline kirjaviis:
y=x[1];
Proovi ise:
Pane tähele: Viide e. indeks algab nulliga (0).
DOM Liideste Kollektsiooni Pikkus
Pikkuse omadus võimaldab määrata liideste hulka arvuliselt:
x=document.getElementsByTagName("p");
for (i=0;i<x.length;i++)
{
document.write(x[i].innerHTML);
document.write("<br />");
}
Proovi ise:
Navigeerimine liidestes
Omadused parentNode, firstChild ja lastChild järgivad dokumendi struktuuri ning võimaldavad navigeerida liidestes mis on omavahel suguluses.
Vaatame ühte dokumenti:
<html>
<body>
<p id="intro">PyramDesign näide</p>
<div id="main">
<p id="main1">HTML DOM on vjalik</p>
<p id="main2">See näide demonstreerib
liideste <b>omavahelisi suhteid</b></p>
</div>
</body>
</html>
Ülal toodud näites, <p id="intro"> on <body> elemendi esimene tütar-liides (firstChild) ja <div> element on <body> elemendi viimane tütar-liides.
Sellest järeldub, et <body> on iga <p> elemendi, juur-liides (parentNode).
firstChild omadust kasutades saavutatakse juurdepääs elemendi tekstile:
var x=document.getElementById("intro");
var text=x.firstChild.nodeValue;
Proovi ise:
Juur liidesed
On veel olemas kaks spetsiaalset dokumendi omadust mis võimaldavad juurdepääsu elementidele:
- documentElement
- document.body
Esimene omadus pöördub dokumendi juur-liidesele ning see omadus asub kõigis XML ja HTML dokumentides.
Teine on spetsiaalne omadus Html dokumendile mis võimaldab otse juurdepääsu <body> märgisesse.
Proovi ise:
Paneme DOM'i tööle
Proovime luua HTML DOM abil väikse tabeli mille lahtrites on mingisugune tekst. Antud näites oleks tekst "lahter on reas y tulbas x"
Kirjuame sellise dokumendi:
<html>
<head>
<title>HTML Tabel koos JavaScript
ja DOM Kasutajaliidesega</title>
<script>
function start() {
// määrame kasutajaliidese body elemendile
var body = document.getElementsByTagName("body")[0];
// loome <table> elemendi ja <tbody> elemedi
var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");
// loome lahtrid
for (var j = 0; j < 2; j++) {
// loome tabeli read
var row = document.createElement("tr");
for (var i = 0; i < 2; i++) {
// Loome <td> elemendi ja teksti liidese
// tekst asub <td> sees ning paneme <td>
// tabeli rea lõppu
var cell = document.createElement("td");
var cellText = document.createTextNode("lahter on reas
"+j+", tulbas "+i);
cell.appendChild(cellText);
row.appendChild(cell);
}
// lisame rea table body lõppu
tblBody.appendChild(row);
}
// paneme <tbody> <table> sisse
tbl.appendChild(tblBody);
// lisame <table> <body> sisse
body.appendChild(tbl);
// määrame äärise atribuudi 2;
tbl.setAttribute("border", "2");
}
</script>
</head>
<body onload="start()">
</body>
</html>
Pane tähele: Muutuja var cellText = document.createTextNode("lahter on reas "+j+", tulbas "+i); on selles näites poolitatud kuna antud lehe disain on selline. Tegelikult ei ole lubatud koodi jätkamine uuelt realt.
Vaatame mida me siis tegime:
- Kõigepealt lõime <table> elemendi.
- Järgmisena lõime <tbody> elemendi mis on omakorda <table> elemendi tütar-liides.
- Seejärel kasutasime silmust (loop) elementi <tr> elemendi loomiseks mis omakorda on <tbody> elemendi tütar-liides.
- Igale <td> elemendile lõime teksti-liidese milleks on tekst tabeli lahtris.
Nüüd kus oleme loonud <table>, <tbody>, <tr> ja <td> elemendid ning tekstiliidese on vaja need vastavalt lisada juurelementidesse:
-
Kõigepealt lisame teksti-liidese tema juurelementti <td>
cell.appendChild(cellText);
-
Järgnevalt lisame iga <td> elemendi tema juurelementti <tr>
row.appendChild(cell);
-
Siis lisame <tbody> elemendi tema juurelementti <table>
tbl.appendChild(tblBody);
-
Lõpuks lisame <table> elemendi tema juurelementti <body>
body.appendChild(tbl);
Jäta see tehnika endale meelde. Kõigepealt loome elemendid ülevalt alla ja siis lisame "tütred" nende vanematele e. juurtele, alt ülesse.
Proovi ise: