Alcuni metodi del DOM ci consentono di analizzare e muoverci all'interno della struttura di un documento. Ad esempio, la proprietà childNodes di un elemento contiene l'elenco dei nodi figli dell'elemento sotto forma di NodeList
. Consideriamo ad esempio il seguente codice HTML:
<div id="mainDiv">
<h1>Titolo</h1>
<p>Un paragrafo</p>
<p>Un altro paragrafo</p>
</div>
Possiamo scoprire il contenuto degli elementi figli del <div>
principale utilizzando il seguente codice JavaScript:
var div = document.getElementById("mainDiv");
for (var i = 0; i < div.childNodes.length; i++) {
console.log(div.childNodes[i].innerHTML);
}
Sono previsti dei metodi per semplificare la navigazione tra i nodi figlio evitando di ricorrere ad un ciclo. Tra questi segnaliamo i metodi firstChild()
lastChild()
Il metodo parentNode()
restituisce il nodo genitore dell'elemento corrente, permettendoci di risalire la struttura gerarchica dell'albero del DOM.
La navigazione del DOM può avvenire non solo verticalmente , analizzando i figli ed il genitore di un elemento, ma anche allo stesso livello dell'albero, scoprendo quali sono i nodi fratelli dell'elemento corrente. Ad esempio, i metodi nextSibling()
e previousSibling()
restituiscono il nodo fratello successivo e precedente nella struttura del DOM.
Non è previsto un metodo per ottenere tutti i fratelli del nodo corrente, ma è possibile aggirare il problema utilizzando il seguente codice JavaScript:
var me = document.getElementById("mainDiv");
var allSiblings = me.parentNode.childNodes;
var mySiblings = [];
for (i = 0; i < allSiblings.length; i++) {
if (allSiblings[i] !== me) {
mySiblings.push(allSiblings[i]);
}
}
Cicli con l'oggetto Array e la funzione forEach
Volendo possiamo scorrere gli elementi sfruttando la funzione forEach del prototipo di Array (Array.prototype.forEach.call
o più semplicemente [].forEach.call
), ecco lo stesso esempio riprodotto utilizzando forEach
:
var me = document.getElementById("mainDiv");
var allSiblings = me.parentNode.childNodes;
var mySiblings = [];
[].forEach.call(allSiblings, function(el) {
if (el !== me) mySiblings.push(el);
});