DOM Samouczek
Rozpoczęcie pracy z DOM
Szukaj…
Uwagi
DOM lub Document Object Model to interfejs API używany przez przeglądarki internetowe i inne aplikacje do uzyskiwania dostępu do zawartości dokumentu HTML.
DOM reprezentuje strukturę jako drzewo, węzły mogą zawierać węzły potomne, węzły bez dzieci są wspomniane węzły liści.
Dzięki niemu można manipulować strukturą i właściwościami dokumentu oraz jego części składowych.
Główne tematy obejmują wyszukiwanie elementów, dostęp do informacji o stylu i animację.
Większość pracy z DOM odbywa się przy użyciu języka JavaScript , ale interfejs API jest otwarty na dowolny język.
Wersje
W3C DOM
Wersja | Data wydania |
---|---|
1 | 01.10.1998 |
2 (rdzeń) | 2000-11-13 |
3 (rdzeń) | 2004-04-07 |
4 | 07.11.2013 |
Poziom API selektorów
Wersja | Data wydania |
---|---|
1 | 21.02.2013 |
Pobieranie istniejących elementów HTML
Jednym z najczęstszych zadań jest pobieranie istniejącego elementu z DOM w celu manipulacji. Najczęściej te metody są wykonywane na document
, ponieważ jest to węzeł główny, ale wszystkie te metody działają na dowolnym elemencie HTML w drzewie. Zwrócą tylko dzieci z węzła, na którym są wykonywane.
Pobierz przez id
var element = document.getElementById("logo");
element
będzie zawierał (jedyny) element, którego atrybut id
ustawiony na „logo” lub zawiera null
jeśli taki element nie istnieje Jeśli istnieje wiele elementów o tym identyfikatorze, dokument jest nieprawidłowy i wszystko może się zdarzyć.
Pobierz według nazwy znacznika
var elements = document.getElementsByTagName("a");
elements
będą zawierać aktywną HTMLCollection
(obiekt podobny do tablicy) wszystkich znaczników link w dokumencie. Ta kolekcja jest zsynchronizowana z DOM, więc wszelkie zmiany w DOM są odzwierciedlane w tej kolekcji. Kolekcja zapewnia losowy dostęp i ma długość.
var element = elements[0];
//Alternative
element = elements.item(0);
element
zawiera pierwszy napotkany element linku HTML lubnull
jeśli indeks jest poza zakresem
var length = elements.length;
length
jest równa liczbie elementów łącza HTML znajdujących się obecnie na liście. Liczba ta może ulec zmianie po zmianie DOM.
Odzyskaj według klasy
var elements = document.getElementsByClassName("recipe");
elements
będą zawierać żywą HTMLCollection
(obiekt podobny do tablicy) wszystkich elementów, których atrybut class
zawiera „przepis”. Ta kolekcja jest zsynchronizowana z DOM, więc wszelkie zmiany w DOM są odzwierciedlane w tej kolekcji. Kolekcja zapewnia losowy dostęp i ma długość.
var element = elements[0];
//Alternative
element = elements.item(0);
element
zawiera pierwszy napotkany element HTML z tą klasą. Jeśli nie ma takich elementów,element
ma wartośćundefined
w pierwszym przykładzie inull
w drugim przykładzie.
var length = elements.length;
length
jest równa liczbie elementów HTML, które obecnie mają klasę „przepis”. Liczba ta może ulec zmianie po zmianie DOM.
Pobierz po nazwie
var elements = document.getElementsByName("zipcode");
elements
będą zawierać aktywną NodeList
(obiekt podobny do tablicy) wszystkich elementów z atrybutem name
ustawionym na „zipcode”. Ta kolekcja jest zsynchronizowana z DOM, więc wszelkie zmiany w DOM są odzwierciedlane w tej kolekcji. Kolekcja zapewnia losowy dostęp i ma długość.
var element = elements[0];
//Alternative
element = elements.item(0);
element
zawiera pierwszy napotkany element HTML o tej nazwie.
var length = elements.length;
length
jest równa liczbie elementów HTML, które obecnie mają „kod pocztowy” jako atrybut nazwy. Liczba ta może ulec zmianie po zmianie DOM.
Pierwsze kroki
DOM (Document Object Model) to interfejs programistyczny dla dokumentów HTML i XML, definiuje logiczną strukturę dokumentów oraz sposób dostępu do dokumentu i manipulowania nim.
Głównymi implementatorami DOM API są przeglądarki internetowe. Specyfikacje są znormalizowane przez grupy W3C i WHATWG , a model obiektowy określa model logiczny interfejsu programowania.
Reprezentacja struktury DOM przypomina widok podobny do drzewa, w którym każdy węzeł jest obiektem reprezentującym część znaczników, w zależności od typu, w którym każdy element dziedziczy określone i wspólne funkcje.
Nazwę „Document Object Model” wybrano, ponieważ jest to „model obiektowy” w tradycyjnym sensie projektowania obiektowego: dokumenty są modelowane przy użyciu obiektów, a model obejmuje nie tylko strukturę dokumentu, ale także zachowanie dokumentu i przedmioty, z których się składa. Innymi słowy, biorąc przykładowy diagram HTML, węzły nie reprezentują struktury danych, reprezentują obiekty, które mają funkcje i tożsamość. Jako model obiektowy model obiektowy dokumentu identyfikuje:
- interfejsy i obiekty używane do reprezentowania dokumentu i manipulowania nim
- semantyka tych interfejsów i obiektów - w tym zarówno zachowanie, jak i atrybuty
- relacje i współpraca między tymi interfejsami i obiektami
Poczekaj na załadowanie DOM
Użyj DOMContentLoaded
gdy kod <script>
współpracujący z DOM znajduje się w sekcji <head>
. Jeśli nie zostanie zawinięty w wywołanie zwrotne DOMContentLoaded
, kod wyrzuci błędy takie jak
Nie można odczytać wartości
null
document.addEventListener('DOMContentLoaded', function(event) {
// Code that interacts with DOM
});
https://html.spec.whatwg.org/multipage/syntax.html#the-end
Alternatywa dla DOMContentLoaded
Alternatywa (odpowiednia dla IE8 )
// Alternative to DOMContentLoaded
document.onreadystatechange = function() {
if (document.readyState === "interactive") {
// initialize your DOM manipulation code here
}
}
https://developer.mozilla.org/en/docs/Web/API/Document/readyState
Użyj innerHTML
HTML
<div id="app"></div>
JS
document.getElementById('app').innerHTML = '<p>Some text</p>'
a teraz HTML wygląda tak
<div id="app">
<p>Some text</p>
</div>
Znaczniki HTML
przykładowe dane wejściowe:
<html>
<head>
<title>the title</title>
<link href='css/app.css' type='text/css' rel='stylesheet'>
<script src='js/app.js'></script>
</head>
<body>
<h1>header</h1>
<div>
<p>hello!</p>
</div>
</body>
</html>
Dane wyjściowe elementu DOM:
------------
| document | <--- DOM root object.
------------
|
|
------------
| html | <--- document.documentElement
------------
______________|______________
| |
------------ ------------
| head | | body |
------------ ------------
______________|______________ |______________
| | | | |
------------ ------------ ------------ ------------ ------------
| title | | link | | script | | h1 | | div |
------------ ------------ ------------ ------------ ------------
|
|
------------
| p |
------------
Wszystkie powyższe elementy dziedziczą po interfejsie HTMLElement i dostosowują się w zależności od określonego znacznika