
Prima di mettersi a manipolare il DOM conviene capire bene che cos’è e come funziona. Il DOM (Document Object Model) descrive come i browser devono costruire un modello di una pagina HTML e come JavaScript può accedere a quel modello e aggiornarne il contenuto. Il modello è un albero i cui elementi sono collegati fra loro, e resta nella memoria del browser mentre la pagina viene caricata. Il DOM è fatto di 4 tipi di nodo.

Questo articolo può essere soggetto ad aggiornamenti
Se hai domande oppure osservazioni, lascia pure un commento.
Document
Il nodo document è il punto di partenza: è da questo nodo che si raggiungono tutti gli elementi del DOM. Rappresenta anche l’oggetto Document, che mette a disposizione diversi metodi per accedere agli elementi. ( es. : document.querySelector(‘div.exemple’); )
Elemento
Gli elementi HTML descrivono la struttura di una pagina HTML. Per entrare nell’albero del DOM parti dalla ricerca degli elementi tramite Document. Una volta trovato l’elemento che ti interessa, puoi accedere ai suoi nodi di testo e di attributo.
Attributo
I tag di apertura degli elementi HTML possono contenere degli attributi ( per esempio : id, class, … ) e questi sono rappresentati nell’albero del DOM da nodi di attributo. I nodi di attributo non sono figli dell’elemento che li porta: fanno parte di quell’elemento e a loro volta non possono avere figli. Una volta raggiunto un elemento, esistono metodi e proprietà JavaScript specifici per leggere o modificare i suoi attributi.
Testo
Come per il nodo di attributo, si arriva a un nodo di testo passando da un nodo elemento, e come per il nodo di attributo, i nodi di testo non possono avere figli.
Accedere agli elementi
Per poter modificare un elemento dobbiamo prima riuscire a raggiungerlo: per questo esistono parecchi metodi che permettono di navigare nel DOM e di modificarlo.
Selezionare un elemento
getElementById(): dà accesso a un elemento tramite il suo attributo ID.querySelector(): restituisce un elemento in base a un selettore CSS.
Selezionare più elementi
Questi metodi restituiscono gli elementi sotto forma di array
getElementsByClassName(): restituisce più elementi tramite una classe.getElementsByTagName(): restituisce più elementi tramite un tag HTML ( es. :<div>) .querySelectorAll(): restituisce più elementi in base a un selettore CSS.
Passare da un nodo all’altro
parentNode: restituisce l’elemento padre dell’elemento corrente.childNodes: restituisce l’elenco dei figli dell’elemento corrente.previousSibling: restituisce il nodo fratello precedente dell’elemento corrente.nextSibling: restituisce il nodo fratello successivo dell’elemento corrente.firstChild: restituisce il primo elemento figlio dell’elemento corrente.lastChild: restituisce l’ultimo elemento figlio dell’elemento corrente.
Manipolare gli attributi
Una volta raggiunto il tuo elemento hai accesso ai suoi attributi e ai loro valori, con diversi metodi per manipolarli.
id
id: legge o imposta l’id dell’elemento
Classe
className: legge o imposta la classe dell’elemento.classList: restituisce un array con l’elenco delle classi dell’elementoadd: aggiungere una classe alla listaremove: togliere una classe dalla listatoggle: aggiungere/togliere una classe (alterna: la aggiunge se non c’è, la toglie se c’è).contains: restituisce un booleano vero se una classe è nella lista.
Attributi in generale
hasAttribute(): restituisce un booleano vero se un attributo esiste nell’elemento corrente.getAttribute(): restituisce il valore di un attributo.setAttribute(): aggiunge all’elemento un attributo e, come secondo argomento, il suo valore.removeAttribute(): toglie un attributo dall’elemento.
Accedere ai valori.
nodeValue: restituisce il contenuto di un nodo, nel caso di un paragrafo restituisce il suo testo, mentre se il nodo è un attributo restituisce il valore dell’attributo.innerText: recupera il testo senza tenere conto del markup..innerHTML: recupera il testo insieme al markup del nodo.textContent: restituisce il testo comeinnerText, ma comprende anche<script>e<style>, al contrario diinnerText.
Aggiungere elementi in 3 passaggi
Una delle cose più importanti quando si manipola il DOM è poter creare nuovi elementi: un elemento completo si crea in 3 passaggi:
createElement(): si comincia creando un nuovo nodo elemento con il metodocreateElement(). Questo nodo elemento viene messo in una variabile.javascriptvar element= document.createElement("p");createTextNode():createTextNode()crea un nuovo nodo di testo. Anche qui il nodo viene messo in una variabile, e può essere agganciato al nodo elemento con il metodoappendChild().javascriptvar texte = document.createTextNode("Lorem Ipsum");appendChild(): ora che hai il tuo elemento, con o senza contenuto in un nodo di testo, puoi aggiungerlo all’albero del DOM con questo metodo.javascriptvar element = document.createElement('p'); var texte = document.createTextNode('Lorem Ipsum'); element.appendChild(texte); document.body.appendChild(element);
Il metodo write
Forse hai sentito parlare del metodo document.write per scrivere markup e testo in un documento, questo metodo però porta parecchi inconvenienti e problemi, perché funziona solo mentre la pagina viene caricata la prima volta e, una volta terminato il caricamento, può causare guai di vario genere.
- Sovrascrivere tutta la pagina
- Non aggiungere il contenuto alla pagina
- Creare una nuova pagina
Togliere un elemento in 3 passaggi
Come per aggiungere un elemento nel DOM, capita di dover eliminare un elemento dal DOM.
- Per farlo devi mettere in una variabile l’elemento che vuoi eliminare.
javascript
var removeElement= document.getElementById('monId'); - Poi, a partire da questa variabile, si accede all’elemento padre con la proprietà
parentNode.javascriptvar parentElement = removeElement.parentNode; - Con questa seconda variabile potrai eliminare l’elemento che avevi messo da parte nel primo passaggio.
javascript
var removeElement= document.getElementById('monId'); var parentElement = removeElement.parentNode; parentElement .removeChild(removeElement);


