Funzione con metodo Apply

  • Creatore Discussione Creatore Discussione andreto
  • Data di inizio Data di inizio

andreto

Utente Attivo
5 Dic 2012
88
0
0
Ciao a tutti,
ho trovato questa funzione, l'ho testata e va benissimo, però arrivato ad un certo punto mi perdo.
Probabilmente non riesco ancora a capire bene come si comporta apply.

Veniamo allo script:

Passando alla funzione di seguito un nodo padre, è in grado di restituire tutti i nodi di testo figli.

HTML:
function getTextNodesIn(node) {    
    var textNodes = [];    
    if (node.nodeType == 3) {       
        textNodes.push(node);       
    } else {        
        var children = node.childNodes;           
        for (var i = 0, len = children.length; i < len; ++i) {           
            textNodes.push.apply(textNodes, getTextNodesIn(children[i]));            
        }        
    }    
    return textNodes;
}

Vi spiego il mio problema.

Sto facendo analizzare questo:

HTML:
<div id="test">123<div>45</div><p></p><span>6<span>7</span></span>89</div>

Invio alla funzione il nodo div genitore di tutti.
La funzione elabora il div, capisce che non è un nodo di testo ed entra nell'else.
Trova i figli e calcola quanti sono.
In questo caso sono 5 figli:

123
<div>
<p>
<span>
89

quindi il for dovrebbe compiere 5 cicli.

Invece non sembrerebbe così!

Il primo figlio è "123",
per mezzo del metodo apply viene passato alla funzione, subito dopo durante il confronto capisce che si tratta di un nodo di testo e lo aggiunge all'array textNodes.
Fin qui tutto ok!

Il problema arriva ora,
il secondo figlio è un div, viene sempre passato alla funzione che confrontandolo capisce che non si tratta di un nodo di testo ed entra nell'else.
Entrando nell'else, poco dopo la i si azzera!

Come fa a ricordarsi degli altri 4 primi figli del div iniziale???
 

Discussioni simili