Il DOM rappresenta il documento HTML caricato nel browser. JavaScript può manipolare il documento attraverso il DOM, ma tali manipolazioni non hanno effetto immediato ma solo dopo che il contesto JavaScript che apporta le modifiche al DOM è finito.
pensare in questo modo:
- JS: Hey documento HTML, sarò apportare alcune modifiche a voi.
- HTML: Ok, vai avanti, contatta il tuo amico DOM e digli cosa vuoi cambiare.
- JS: OK, ci sto ...
- JS: OK, ho apportato alcune modifiche, ma ciao, ci sono alcune altre cose che ho bisogno di cambiare.
- HTML: OK, vai avanti, aspetterò fino a quando non finisci tutto.
- JS: OK, fatto con tutto
- HTML: OK, chiederò al DOM cosa hai cambiato e applicare quelli.
Si consideri il seguente test:
var a = document.body.children[0];
a.style.color = 'red';
for(var i = 0; i < 10000000000; i++) { };
a.style.color = 'blue';
Anche se non c'è molto tempo tra l'istruzione per cambiare il colore in rosso e quello di cambiarlo in blu, non vedrete mai il colore cambia a rosso perché tutte le modifiche saranno applicate una volta terminato il JS.
In effetti, il colore diventa rosso ma solo per un periodo di tempo così breve prima che cambi in blu che il browser non ha nemmeno il tempo di eseguire il rendering. O se lo è, non te ne accorgi.
In altre parole, le manipolazioni del DOM vengono accodate dal browser. La coda verrà eseguita una volta terminato il contesto JS. Se JavaScript trascorre del tempo tra 2 modifiche DOM su altre attività, questo ritarderà l'avvio dell'esecuzione della coda e quindi tutte le modifiche in coda verranno eseguite in grande successione.
Alla luce delle informazioni di cui sopra, dovrebbe essere chiaro che la modifica del DOM non è la stessa cosa che la modifica del documento HTML.
http://stackoverflow.com/questions/4110081/difference-between-html-and-dom – Chrillewoodz