WWW-ohjelmointi

Dokumentti

Javascriptin käyttö www-sivuilla pyrkii yleensä saamaan aikaiseksi myös jotain sivun käyttäjälle näkyvää. Toisin sanoen Javascript-ohjelmalla pitää pystyä muokkaamaan selaimessa näytettävää dokumenttia jollain tavalla.

Tätä varten selainikkuna (tai välilehti) sekä ikkunassa näytettävä dokumentti ovat edustettuina ohjelmaa suorittavassa Javascript-ympäristössä omina objekteinaan: window ja document.

window-objekti

Ikkunaa edustava window-objekti on selaimessa suoritettavan Javascriptin globaali objekti, eli objekti, jonka ominaisuutena kaikki globaalit muuttujat ovat. Siis, mikä tahansa kaikkien funktioiden ulkopuolella luotu muuttuja, eli globaali muuttuja, ilmestyy window-objektin ominaisuudeksi. Tai päin vastoin, jos window-objektiin luodaan uusi ominaisuus, siitä tulee globaali muuttuja, joka on käytettävissä kaikkialla, missä sitä ei ole “peitetty” saman nimisellä lokaalilla muuttujalla.

document-objekti

Objekti nimeltä document edustaa koko selaimeen ladattua dokumenttia ja sen kautta Javascriptillä pääsee tutkimaan ja muokkaamaan mitä tahansa kohtaa dokumentista. HTML DOM (Document Object Model) tarkoittaa puurakennetta, joka mallintaa HTML-dokumentin Javascript-objektiksi. Tätä objektia muokkaamalla Javascript-ohjelma voi:

  • muokata sivun HTML-elementtejä,
  • muokata sivun HTML-elementtien attribuutteja,
  • muokata sivun CSS-tyyliä,
  • poistaa HTML-elementtejä ja attribuutteja,
  • lisätä HTML-elementtejä ja attribuutteja
  • reagoida sivulla tapahtuviin tapahtumiin,
  • luoda uusia tapahtumia sivulle.

Itse document-objekti on DOM-puun juuri, jonka ominaisuutena ovat dokumentin head- ja body-elementtejä edustavat objektit sekä niiden lapsina ja lastenlapsina edelleen kaikki sivulla olevat HTML-elementit. Lisäksi document ja sekä jälkeläiset sisältävät joukon metodeja, joilla voi etsiä, muokata, luoda ja poistaa HTML-elementtejä DOM-puussa.

Esimerkiksi:

<!DOCTYPE html>
<html>
    <head lang="fi-fi">
        <title>Otsikko</title>
        <meta charset="utf-8">
        <style>
            h1 {color: red;}
        </style>
    </head>
    <body id="etusivu" class="sivu maanantai">
        <header> ... </header>
        <nav> ... </nav>
        <aside class="sivujuttu"> ... </aside>
        <article> ... </article>
        <footer> ... </footer>
    </body>
</html>
document.documentElement;              // <html lang="fi-fi">     (<html>-elementti objektina)
document.head;                         // <head>                  (<head>-elementti objektina)
document.body;                         // <body>                  (<body>-elementti objektina)
document.head.children;                // HTMLCollection [<title>, <meta>, <style>]
                                       // Arrayn kaltainen objekti, jossa <head>-elementin lapset
document.head.children.length;         // 3
document.body.children.length;         // 5
document.body.attributes;              // NamedNodeMap [ id="etusivu", class="sivu maanantai" ]
                                       // Arrayn kaltainen objekti, jossa objekteja, joilla 'name'- ja 'value'-ominaisuudet
document.body.className;               // "sivu maanantai"        (class-attribuutin arvo merkkijonona)
document.body.classList;               // ["sivu", "maananatai"]  (class-attribuutissa luetellut luokat taulukkona)