La proprietà nodeType in Javascript

La proprietà nodeType è una proprietà che mi restituisce il tipo di un nodo.

nodetype

Ogni nodo ha un tipo che determina quali operazioni possono essere effettuate.

Ci sono diversi tipi di nodi, ma i più comuni sono:

  • Element Node (tipo 1)
    Rappresenta gli elementi HTML, come <div>, <p>, <a> ecc.
  • Text Node (tipo 3)
    Rappresenta il testo all'interno degli elementi. Per esempio, il contenuto testuale di un paragrafo <p>.
  • Comment Node (tipo 8)
    Rappresenta i commenti nel codice HTML.

Questa proprietà è fondamentale quando lavoro con il Document Object Model (DOM) nel web development.

Cos'è il DOM? Il DOM è essenzialmente la struttura ad albero che rappresenta una pagina web nel browser. Ogni elemento della pagina, come un paragrafo, un'immagine o anche un semplice testo, è un nodo in questo albero.

Ecco un esempio pratico di utilizzo.

Considero questo documento HTML

  1. <html>
  2. <body>
  3. <!-- Commento --><p>Questo è un paragrafo. <span>Questo è un testo all'interno di uno span.</span></p>
  4. <script>
  5. let paragrafo = document.querySelector("p");
  6. document.write(paragrafo.nodeType);
  7. let testo = paragrafo.firstChild;
  8. document.write(testo.nodeType);
  9. let commento = paragrafo.previousSibling;
  10. document.write(commento.nodeType);
  11. </script>
  12. </body>
  13. </html>

Il tag <p> è un Element Node, il testo "Questo è un paragrafo." è un Text Node, mentre il commento iniziale è un Comment Node.

Lo script seleziona il primo tag <p> tramite  document.querySelector("p") e lo salva nella variabile paragrafo.

Poi, utilizza la proprietà nodeType per restituire il tipo di nodo.

In questo caso stampa 1, perché il tag <p> è un Element Node

1

Poi utilizza firstChild per individuare il primo nodo figlio all'interno del nodo corrente ovvero del paragrafo <p>, estrae il tipo di nodo e lo stampa.

Ora stampa 3, perché il nodo figlio "Questo è un paragrafo." è un nodo di testo (Text Node)

3

Infine, lo script individua il nodo precedente al nodo corrente (<p>) tramite previousSibling che, in questo caso, è un commento.

Quindi, la proprietà nodeType restituisce il tipo 8.

8

A cosa serve conoscere il tipo di nodo?

E' particolarmente utile quando manipolo il DOM.

Ad esempio, potrei voler attraversare il documento  per fare qualcosa solo con i nodi di tipo testo, ignorando i nodi di tipo elemento e i commenti. Conoscere il nodeType mi permette di identificare i nodi di testo e agire solo su di essi.

Ecco un esempio di codice che fa proprio questo:

  1. <html>
  2. <body>
  3. <!-- Commento -->
  4. Questo è un testo
  5. <p>Questo è il paragrafo 1 <span>Questo è uno span</span></p>
  6. <p>Questo è il paragrafo 2</p>
  7. <p>Questo è il paragrafo 3</p>
  8. <script>
  9. let paragrafi = document.querySelectorAll("p");
  10. paragrafi.forEach(p => {
  11. p.childNodes.forEach(nodo => {
  12. // Se è un Text Node cambia il contenuto
  13. if (nodo.nodeType === 3) {
  14. nodo.textContent = "Testo aggiornato";
  15. }
  16. });
  17. });
  18. </script>
  19. </body>
  20. </html>

Questo codice seleziona tutti i paragrafi con document.querySelectorAll("p"), poi itera su ogni nodo figlio (childNodes) di ogni paragrafo.

Se il nodo figlio è un nodo di testo (tipo 3) aggiorna il suo contenuto.

Pertanto, il risultato finale visualizzato sullo schermo del browser è il seguente:

Questo è un testo
Testo aggiornatoQuesto è uno span
Testo aggiornato
Testo aggiornato

Il primo nodo ("Questo è un testo") viene stampato tale e quale perché non non è un paragrafo <p>. Quindi, non viene selezionato.

Nel primo paragrafo <p> viene sostituito solo il nodo figlio di tipo testo ("Questo è il paragrafo 1") ma non il nodo figlio <span> perché quest'ultimo ha il nodeType di tipo Element (tipo 1).

E via dicendo.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Document in Javascript

I metodi

Le proprietà