devi considerare gli spazi anche. Metti di avere l'html:
codice:
<div>
Uno</p>
Due</p>
</div>
il codice nell'albero DOM risultante sarà:
codice:
[ElementNode DIV value=""]
|---[TextNode value="\n"]
|---[TextNode value=" "]
|---[ElementNode P value=""]
|---[TextNode value = "Uno"]
|---[TextNode value="\n"]
|---[ElementNode P value=""]
|---[TextNode value = "Due"]
|---[TextNode value="\n"]
Come vedi gli spazi e gli a capo sono sempre indicati tra i sibling del DOM. Il modo migliore per ricercare all'interno di un albero DOM determinati nodi e quello di elencare ricorsivamente i nodi nei diversi elementi.
Ti scrivo una funzione veloce che prende in ingresso alcuni parametri:
codice:
//Questa funzione prende in ingresso un elemento, il tag degli elementi da cercare e ritorna l'array con tutti gli elementi che hanno quel tag
function ElementScan(elem, tagName){
var elems = [];
if(elem.nodeType == 1){ //È un elemento
if(elem.tagName.toUpperCase() == tagName.toUpperCase())
elems.push(elem);
//Questo è importante: è il ciclo for su tutti i nodi contenuti nell'elemento
for(var c = elem.firstChild; c != null; c = c.nextSibling){
elems = elems.concat(ElementScan(c, tagName));
}
}
return elems;
}
Nel tuo caso, chiami la funzione così:
codice:
var myFieldsets = ElementScan(document.getElementById("registration"), "fieldset");
nell'array myFieldsets avrai tutti gli elementi fieldset dell'HTML risultante.