1
1
JavaScript - wykład 3
Document Object Model
(Model Obiektów Dokumentu)
Beata Pańczyk
2
DOM W3C
http://kurs.browsehappy.pl/Definicja/DOM
• DOM W3C (nazywany czasem wg wersji: DOM1,
DOM2, DOM3)
• służy głównie do przedstawienia dokumentów
HTML oraz XML (XHTML). Używają go języki
takie jak CSS i Javascript do operowania na
dokumentach
• Wg W3C DOM dokument to drzewiasty zbiór
węzłów. Węzeł może być elementem, ciągiem
tekstu, komentarzem, itp. Każdy węzeł może mieć
jednego rodzica, dowolną ilość braci (lub
sąsiadów) i, jeśli jest elementem, dowolną ilość
dzieci.
3
DOM W3C
4
Metody DOM
element.getElementsByTagName('*')
element *
Potomkowie
(Descendants)
element.childNodes
element > *
Wszystkie dzieci
(Children)
element.lastChild
element >
dziecko:last-child
Ostatnie dziecko
(Last child)
element.firstChild
element >
dziecko:first-child
Pierwsze dziecko
(First child)
element.nextSibling
element + sąsiad
Następny sąsiad
(Next sibling)
element.previousSibling
brak
Poprzedni sąsiad
(Previous sibling)
element.parentNode.parentNode...
brak
Przodek (Ancestor)
element.parentNode
brak
Rodzic (Parent)
element.ownerDocument.documentElement
:root, html
Korzeń (Root)
JavaScript DOM
Selektor CSS
Węzeł
5
Metody DOM
Selektory CSS nie dają możliwości
wybrania przodków, ani poprzedników aby
ułatwić przeglądarkom wyświetlanie
progresywne (element występujący później
w dokumencie nie powinien
mieć wpływu na wcześniejsze) oraz
uniemożliwić zrobienie kombinacji
selektorów dających błędne koło.
6
Inne modele dokumentu
• DOM Netscape (DOM0) - znacznie różniący się
od W3C DOM, był częścią pierwotnego języka
Javascript wprowadzonego przez Netscape.
Dzielił dokument na kolekcje obrazków, linków,
fomularzy, itp. Część z tych rozwiązań została
zachowana w W3C DOM dla kompatybilności
wstecz
• DOM Microsoft (DHTML) document.all był
zbiorem wszystkich elementów posortowanym wg
ich identyfikatora, kolejności w dokumencie lub
nazwy tagu. Microsoft porzucił swój DOM na
rzecz tego z W3C
2
7
DOM dla JavaScript
• DOM - sposób przedstawienia dokumentu; zestaw metod i pól,
które umożliwiają odnajdywanie, zmienianie, usuwanie i dodawanie
elementów
• DOM W3C (dwie części):
– podstawowy (ang. core) to ogólny sposób reprezentowania
dokumentów XML; przedstawia dokument jako drzewo
zawierające węzły (ang. node). Każdy węzeł może być
elementem, fragmentem tekstu, komentarzem, instrukcją
preprocesora (np. dołączonym fragmentem PHP) albo encją
– DOM HTML (typowy dla przeglądarek) - to zestaw metod
ułatwiających tworzenie dynamicznych stron oraz
zapewniających kompatybilność wstecz z wcześniejszym
prostym DOM Netscape. DOM HTML przedstawia dokument
jako kilka kolekcji obiektów określonych typów (np. formularze,
obrazki) oraz dodaje pola/metody ułatwiające dostęp do
funkcjonalności specyficznej dla HTML, jak np. odczyt pól
formularza.
8
Podstawowe obiekty
• window
- główny, globalny obiekt w
DOM; w nim przechowywane są
wszystkie globalne zmienne i funkcje; w
nim jest także obiekt document, który
reprezentuje całą stronę XHTML
• document.documentElement
- główny
element dokumentu (korzeń), czyli <html>
• document.body
- obiekt reprezentujący
<body> dokumentu.
9
Odnajdywanie elementów (1)
• getElementById(id) - po identyfikatorze
var elid = document.getElementById('elid')
if (!elid) alert('nie ma elementu o tym id!')
• getElementsByTagName(nazwa) - po nazwie elementu;
zwraca kolekcję wszystkich elementów, które mają
określoną nazwę; * zamiast nazwy - wszystkie elementy;
wywołanie metody na dowolnym elemencie – zwraca tylko
elementy w nim zawarte:
var bary = elid.getElementsByTagName('bar')
for(i=0;i<bary.length;i++) bary[i]
bary - kolekcja (tablica) wszystkich elementów o nazwie
bar wewnątrz elementu reprezentowanego przez obiekt elid
Kolekcje reagują na zmiany w dokumencie - jeśli element
zostanie usunięty z dokumentu, to zniknie także ze
wszystkich kolekcji
10
Skakanie po węzłach (elementach)
Każdy węzeł (czyli element, fragment tekstu, komentarz) posiada
pola wskazujące na jego sąsiednie węzły
Kolekcja wszystkich węzłów zawartych w tym
elemencie
ChildNodes
Element, w którym zawarty jest ten element
ParentNode
Sąsiedni węzeł za tym elementem
Next sibling
Sąsiedni węzeł przed tym elementem
Previous sibling
Ostatni węzeł zawarty w tym elemencie
Last child
Pierwszy węzeł zawarty w tym elemencie
First child
Element
Nazwa pola
11
Wyszukiwanie tylko elementów
•
Domyślnie pola wskazują na dowolne węzły, łącznie z tekstem i
komentarzami w dokumencie
•
Elementy od innych węzłów można odróżnić za pomocą pola
nodeTyp:
if (element.nextSibling && element.nextSibling.nodeType == 1)
alert('sąsiedni węzeł jest elementem')
COMMENT_NODE
ENTITY_NODE
TEXT_NODE
ELEMENT_NODE
Stała
Komentarz
8
Encja
6
Tekst
3
Element
1
Znaczenie
Wartość
12
Atrybuty
• getAttribute(nazwa) – odczyt, zwraca null jeżeli atrybut nie
istnieje
• setAttribute(nazwa,wartość) – ustawianie
• removeAttribute(nazwa) – usuwanie
• hasAttribute(nazwa) - sprawdzenie czy dany atrybut istnieje
Np.:
<a href="http://kurs.browsehappy.pl/" rel="archive" id="kurs">
Kurs BrowseHappy</a>
anchor = document.getElementById('kurs');
var anchorRel = anchor.getAttribute('rel');
alert(anchorRel); //zwróci warto
ść
atrybutu rel
if(anchor.hasAttribute('class'))
var anchorClassName = anchor.getAttribute('class');
alert(anchorClassName); //je
ż
eli istnieje class, to zwróci jego
warto
ść
anchor.setAttribute("rel", "kurs"); //nadpisze rel
anchor.setAttribute("lang", "pl"); //stworzy nowy atrybut i
// przypisze mu warto
ść
3
13
Usuwanie, tworzenie i dodawanie
elementów
• removeChild - metoda pozwalającą (każdemu elementowi)
usunąć jeden z węzłów w nim zawartych
element.parentNode.removeChild(element)
• element usunięty z dokumentu nie jest całkowicie niszczony i
może zostać ponownie dołączony do dokumentu
• document.createElement(nazwa) – tworzy element, który nie
jest połączony z dokumentem - trzeba go dodać za pomocą
• appendChild lub insertBefore
• Tekst tworzy się za pomocą:
document.createTextNode("tekst")
podobnie jak elementy trzeba go wstawić do dokumentu, żeby
stał się widoczny.
14
Tworzenie, dodawanie i przenoszenie
elementów - przykład
• Np.
var p = document.createElement('p');
document.body.appendChild(p);
var h1 = document.createElement('h1');
document.body.insertBefore(p,document.body.firstChild);
• Komentarz:
– appendChild() element podany jako argument dołącza jako
dziecko na koniec elementu, z którego została wywołana
– insertBefore przyjmuje dwa argumenty — element do
wstawienia oraz element przed, którym ma wstawić nowy.
Jeśli jako drugi argument poda się null, to zadziała tak samo
jak appendChild
– wykonanie appendChild lub insertBefore na elementach, które
są już w dokumencie przeniesie je w nowe miejsce
15
Przykład 1 – JavaScript i DOM
<head>
<meta http-equiv="Content-type"
content="application/xhtml+xml;
charset=iso-8859-2" />
<title> DOM i JavaScript </title>
<script type="text/javascript"
src="js_dom.js"> </script>
</head>
<body onload="process()">
<p>Lista kolorów:</p>
<div id="lista_kol"></div>
</body>
16
Przykład 1 – JavaScript i DOM
Plik js_dom.js
function process()
{ // tworzenie kodu HTML
var lista;
lista = "<ul>" + "<li>Czarny</li>"
+ "<li>Pomara
ń
czowy</li>"+ "<li>Ró
ż
owy</li>"
+ "</ul>";
// pobranie odwołania do elementu <div> na stronie
myDiv = document.getElementById("lista_kol");
// dodanie zawarto
ś
ci do elementu <div>
myDiv.innerHTML = lista;
}
17
Przykład 1 – JavaScript i DOM
Plik js1_dom.js
function process()
{// tworzy pierwszy w
ę
zeł tekstowy
oHello = document.createTextNode ("Lista kolorów:");
// tworzy element <ul>
oUl = document.createElement("ul")
// tworzy pierwszy element <ui> i dodaje do niego w
ę
zeł tekst.
oLiBlack = document.createElement("li");
oBlack = document.createTextNode("Czarny");
oLiBlack.appendChild(oBlack);
// tworzy drugi element <ui> i dodaje do niego w
ę
zeł tekstowy
oLiOrange = document.createElement("li");
oOrange = document.createTextNode("Pomara
ń
czowy");
oLiOrange.appendChild(oOrange);
18
Przykład 1 – JavaScript i DOM
Plik js1_dom.js
// tworzy trzeci element <ui> i dodaje do niego w
ę
zeł tekstowy
oLiPink = document.createElement("li");
oPink = document.createTextNode("Ró
ż
owy");
oLiPink.appendChild(oPink);
// dodaje elementy <ui> do elementu <ul> jako jego potomstwo
oUl.appendChild(oLiBlack);
oUl.appendChild(oLiOrange);
oUl.appendChild(oLiPink);
// pobiera odwołanie do elementu <div> na stronie
myDiv = document.getElementById("lista_kol");
// dodaje zawarto
ść
do elementu <div>
myDiv.appendChild(oHello);
myDiv.appendChild(oUl);
}
4
19
Przykład 2 – DOM, JS i CSS
<head>
<script type="text/javascript„ src="csstest.js"></script>
<link href="styles.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<table id="table">
<tr><th id="tableHead">Technologie internetowe</th> </tr>
<tr><td id="tableFirstLine"> XHTML/CSS </td> </tr>
<tr><td id="tableSecondLine">JavaScript </td> </tr>
</table> <br />
<input type="button" value="Ustaw Styl 1"
onclick="setStyle1();" />
<input type="button" value="Ustaw Styl 2"
onclick="setStyle2();" />
</body> </html>
20
Przykład 2 – csstest.js
// Zmiana stylu tabeli na styl 1
function setStyle1() {
// pobranie odwołań do elementów HTML
oTable = document.getElementById("table");
oTableHead = document.getElementById("tableHead");
oTableFirstLine = document.getElementById("tableFirstLine");
oTableSecondLine = document.getElementById("tableSecondLine");
// ustawienie styli
oTable.className = "Table1";
oTableHead.className = "TableHead1";
oTableFirstLine.className = "TableContent1";
oTableSecondLine.className = "TableContent1";
}
21
Przykład 2 – csstest.js
// Zmiana stylu tabeli na styl 2
function setStyle2() {
// pobranie odwołań do elementów HTML
oTable = document.getElementById("table");
oTableHead = document.getElementById("tableHead");
oTableFirstLine = document.getElementById("tableFirstLine");
oTableSecondLine = document.getElementById("tableSecondLine");
// ustawienie styli
oTable.className = "Table2";
oTableHead.className = "TableHead2";
oTableFirstLine.className = "TableContent2";
oTableSecondLine.className = "TableContent2";
}
22
Przykład 2 – styles.css
.Table1 {
border: DarkGreen 1px solid;
background-color:LightGreen;}
.TableHead1 { font-family: Verdana, Arial; font-weight: bold;
font-size: 10pt; }
.TableContent1{ font-family: Verdana, Arial; font-size: 10pt; }
.Table2 {
border: DarkBlue 1px solid;
background-color:LightBlue;}
.TableHead2 { font-family: Verdana, Arial; font-weight: bold;
font-size: 10pt; }
.TableContent2 { font-family: Verdana, Arial; font-size: 10pt; }
23
Przykład 2 – wynik działania
24
Obiekty stron WWW
Obiekty każdej strony:
• navigator
informacje o przeglądarce
• window
bieżące okno przeglądarki
• document
bieżący dokument HTML
• location
bieżący adres URL
• history
lista historyczna przeglądarki
Obiekty dodatkowe:
• anchor
• link
• image
• form
• plugin
• mimeType
5
25
Schemat dziedziczenia obiektów
strony WWW
window
document
location
history
frame
navigator
layer
image
link
area
anchor
applet
embed
form
plugin
mimeType
element
26
Obiekt
window
• Reprezentuje widoczne okno przeglądarki
• Jest tworzony automatycznie w chwili
otwarcia okna przeglądarki
• Stoi na czele hierarchii obiektów JavaScript
• W odwołaniu do właściwości i metod okna
bieżącego - nazwa
window
niekonieczna
• Przykład
alert("Uwaga!");
window.alert("Uwaga!");
27
Metody obiektu
window
• alert(
"
komunikat
"
)
wyświetla komunikat w okienku dialogowym
z przyciskiem OK
• zmienna=window.prompt(
"
komunikat
"
,
"
warto
ść
_domy
ś
lna
"
)
- wyświetla okienko
dialogowe z promptem o treści komunikat i
zwracająca dane wprowadzone przez użytkownika
• confirm(
"
komunikat
"
)
wyświetla komunikat w okienku dialogowym
z przyciskiem OK i Cancel; metoda zwraca wartość
true, gdy użytkownik wybierze przycisk OK i false w
przeciwnym razie
• Status -
wyświetla komunikat na pasku stanu
28
Metody obiektu
window
• open("URL", "nazwa okna", cecha1,
cecha2,...)
- otwiera nowe okno przeglądarki z
podanymi cechami
• close()
- likwiduje okno, w którym metoda występuje
• setTimeout("zadanie", czas)
wykonuje
zadanie
(wyrażenie lub funkcję) po upływie
podanego
czasu
(w milisekundach)
• setInterval
("funkcja", czas [,argumenty])
wywołuje funkcję w regularnych odstępach czasu (w
milisekundach); v. 1.2
• Zatrzymanie wykonywania metod:
clearTimeout(identyfikator)
clearInterval(identyfikator)
29
Przykład - ruchomy napis w pasku stanu
<head> <script type="text/javascript">
var napis="Witamy!!! ";
var i=0;
function przewijaj(){
n1=napis.substring(i, napis.length);
n2=napis.substring(0,i);
status=n1+n2;
if(i<napis.length) i++; else i=0;
setTimeout("przewijaj();",200);}
</script>
</head> <body onload="przewijaj();">
</body></html>
30
Własności obiektu
window
• self
wskazuje bieżące okno
• parent
wskazuje okno rodzicielskie ramki
• top
wskazuje okno najwyższego rzędu,
"właściciela" wszystkich ramek
• name
wewnętrzny identyfikator okna
(ramki)
• frames
tablica ramek potomnych w oknie
• document
wskazuje bieżący dokument
6
31
Tablice obiektów standardowych
• Zawierają wszystkie zdefiniowane
w obiekcie znaczniki danego typu
• Indeksy pól tablic - nadawane według
kolejności definiowania danego rodzaju
znaczników
• Przykład - określenie liczby formularzy w
oknie:
forms.length
32
Obiekt
document
• Tworzony automatycznie przez znacznik
<body>
• Zawiera
– wszystkie informacje na temat aktualnie
wyświetlanego dokumentu HTML
– wszystkie elementy składowe dokumentu
• Elementy składowe - w tablicach
33
Własności obiektu
document
• alinkColor
parametr alink znacznika
<body>
• vlinkcolor
parametr vlink znacznika
<body>
• bgcolor
parametr bgcolor znacznika
<body>
• fgcolor
parametr text znacznika
<body>
• title
tytuł strony (znacznik <title>)
• url
adres URL dokumentu
34
Tablice obiektu
document
• anchors
tablica obiektów typu
anchor
• links
tablica obiektów typu
link
• images
tablica obiektów typu
image
• frames
tablica obiektów typu
frame
• forms
tablica obiektów typu
form
• embeds
tablica obiektów typu
embed
• applets
tablica obiektów typu
applet
• layers
tablica obiektów typu
layer
35
Metody i zdarzenia dla obiektu
document
• Metody:
– document.clear()
- czyszczenie bieżącego okna
– document.write(
"
tekst
"
)
- wyświetla tekst w
oknie np. document.write(" <h1>Dziekujemy</h1> ")
– document.writeln("tekst")
• Zdarzenia:
– onLoad - wyzwala skrypty, które powinny zostać
uruchomione bezpośrednio po zakończeniu ładowania
dokumentu HTML do przeglądarki
– onUnload - wyzwala skrypty, które powinny zostać
uruchomione bezpośrednio po wyjściu z dokumentu
HTML
•
36
Przykładowa strona WWW
images[0]
forms[0]
elements[0]
elements[1]
elements[2]
elements[3]
links[1]
links[0]
7
37
Zależności hierarchiczne tablic
• Hierarchia obiektów strony WWW
• Odwołanie do wartości pola
nazwisko
document.forms[0].elements[1].value
• Nadawanie obiektom nazw, np.
document.formularz.nazwisko.value
document
links[0]
images[0]
forms[0]
links[1]
elements[0] elements[1] elements[2] elements[3]
38
Obiekt
location
• Zawiera adres URL aktualnego dokumentu
• Pełna postać adresu URL
protocol//host:port/pathname#hash?search
• Zmiana dokumentu wyświetlanego w oknie
nazwa_okna.location=nowy_adres
• Przykład - kierowanie użytkownika na inną stronę
<a href="brak_js.html"
onclick="window.location='jest_js.html';
return false;">zapraszamy</a>
39
Własności obiektu
location
• href
pełny adres URL
• protocol
protokół - np.
http:
• host
nazwa serwera
• port
port, przez który należy się łączyć
z serwerem
(zwykle
location.port=''
)
• hostname
to sam, co
host:port
• pathname
ś
cieżka dostępu do dokumentu
• hash
zakotwiczenie w dokumencie
• search
dodatkowe parametry
40
Obiekt
history
• Zawiera informacje na temat adresów
dokumentów HTML, które były ostatnio
ładowane przez przeglądarkę (odpowiada
liście historycznej przeglądarki)
• Adresy URL - przechowywane w formie
łańcuchów tekstowych
41
Metody obiektu
history
• back
()
przejście o jedno miejsce na
liście wstecz
• forward
()
przejście o jedno miejsce na
liście w przód
• go
(liczba)
przejście w miejsce
określone liczbą, np.
go(-1)
=
back()
• go
("łańcuch")wyszukuje najbliższy adres
zawierający podany łańcuch
42
Przykład - obiekt
history
<html> <body>
<!-- ewentualna zawarto
ść
strony -->
<form>
<input type="button" value="wstecz"
onclick="history.back();"/>
<input type="button" value="dalej"
onclick="history.forward();"/><br/>
</form>
</body>
</html>
8
43
Własności obiektu
navigator
• Służy do ustalenia wersji przeglądarki używanej
przez użytkownika (funkcja informacyjna -dane do
odczytu)
• appCodeName
- nazwa kodowa przeglądarki
• appName -
nazwa przeglądarki
• appVersion -
numer wersji przeglądarki
• userAgent -
pełna informacja o przeglądarce
• language -
wersja językowa przeglądarki
• platform -
system operacyjny przeglądarki
44
Własności obiektu
mimeType
• type
nazwa typu MIME
• description
opis typu
(np. "GIF Image")
• suffixes
możliwe rozszerzenia pliku
(np. GIF)
• enabledPlugin
odsyłacz do obiektu
plugin
skonfigurowanego
dla danego typu MIME
45
Obiekt
plugin
• Obiekt typu
plugin
- tablica zawierąjącą
podstawowe dane typu MIME danego modułu
• Właściwości obiektu
plugin
– name
nazwa plug-ina
– description
opis
– filename
nazwa pliku z programem
– length
liczba typów MIME
obsługiwanych przez plug-in
46
Przykład - kontrola
przeglądarki i plug-ina
<head>
<script type="text/javascript">
document.write("<h3>"+navigator.appName+"</h3>");
ile=navigator.plugins.length; //ilo
ść
plug-in
if (ile>0){for (i=0; i<ile; i++)
document.write("Plug-in:"+navigator.plugins[0].name+"<br/>");}
else document.write("Brak plug-in");
</script>
</head>
<body></body>
</html>