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.