DOM reprezentuje dokument HTML załadowany w przeglądarce. JavaScript może manipulować dokumentem poprzez DOM, ale te manipulacje nie działają natychmiast, ale dopiero po zakończeniu kontekstu JavaScript, który powoduje, że zmiany w DOM są zakończone.
Pomyśl o tym w ten sposób:
- JS: Hej dokument HTML, mam zamiar wprowadzić kilka zmian do ciebie.
- HTML: Ok, idź dalej, skontaktuj się ze znajomym DOM i powiedz mu, co chcesz zmienić.
- JS: OK, jestem na tym ...
- JS: OK, wprowadziłem pewne zmiany, ale hej, jest jeszcze kilka rzeczy, które muszę zmienić.
- HTML: OK, proszę bardzo, poczekam, aż wszystko skończycie.
- JS: OK, zrobione ze wszystkim
- HTML: OK, zapytam DOM, co zmieniliście i zastosujcie.
Rozważmy następujący test:
var a = document.body.children[0];
a.style.color = 'red';
for(var i = 0; i < 10000000000; i++) { };
a.style.color = 'blue';
Chociaż istnieje znaczny czas pomiędzy instrukcją, aby zmienić kolor na czerwony, a ten, aby zmienić go na niebieski, nigdy nie zobaczyć kolor zmienia się czerwony, ponieważ wszystkie zmiany zostaną zastosowane po zakończeniu JS.
W rzeczywistości, kolor zmienia się na czerwony, ale tylko na tak krótki czas, zanim zmieni się na niebieski, że przeglądarka nie ma nawet czasu na wyświetlenie zmiany. A jeśli tak, nie zauważysz.
Innymi słowy, manipulacje DOM są ustawiane w kolejce przez przeglądarkę. Kolejka zostanie wykonana po zakończeniu kontekstu JS. Jeśli JavaScript spędza czas pomiędzy 2 zmianami DOM w innych zadaniach, opóźni to rozpoczęcie wykonywania kolejki, a wszystkie kolejkowane zmiany będą wykonywane wielkimi krokami.
W świetle powyższych informacji, powinno stać się jasne, że zmiana DOM nie jest tym samym, co zmiana dokumentu HTML.
http://stackoverflow.com/questions/4110081/difference-between-html-and-dom – Chrillewoodz