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.
Vi spiego il mio problema.
Sto facendo analizzare questo:
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???
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???