Ho un set nidificato di tag html e voglio eliminare tutti i tag e i relativi figli senza testo.jQuery rimuove in modo ricorsivo i bambini vuoti
Esempio:
<div id="mydiv">
<span></span>
<span><br></span>
<span> <span><br></span> </span>
<span> <span><br> <span></span> </span> </span>
<span> <img src="someimg.jpg" width="100" height="100"> </span>
<span>some text</span>
</div>
quindi voglio campate con immagini e testo di rimanere e altri lasciano.
ho bisogno che il risultato dopo la mia funzione:
<div id="mydiv">
<span> <img src="someimg.jpg" width="100" height="100" /> </span>
<span>some text</span>
</div>
ho capito, questo deve essere fatto in modo ricorsivo mediante JavaScript o jQuery con il suo metodo .children() ecco il mio codice che ho voluto usare, ma io non riesco a capire come costruire la ricorsione:
var remove_filter = function() {
children= $(this).children();
for (var i = -1, l = children.length; ++i < l;) {
if ($(children[i]).text() == "") {
$(children[i]).remove();
}
//may be recursion here
//else if(){
//}
}
return $(this).text() == "" && $(this).children().length == 0;
}
$('#mydiv').find('span').filter(remove_filter).remove();
Questo codice è rotto, cancella e lascia campate vuote ... Come un io guadagno il mio risultato con la ricorsione?
CURA
Ecco la mia jsfiddle: http://jsfiddle.net/EGVQH/
modificato 2 volta
Ho trovato un bug nel la risposta giusta, ma è piccola. Se ho il codice come questo:
<div id="mydiv">
<span> <br> Some text</span>
<span> <span><br> <span></span> </span> </span>
<span> <img src="someimg.jpg" width="100" height="100"> </span>
<span>some text</span>
</div>
suppongo che al risultato in:
<div id="mydiv">
<span> Some text</span>
<span> <img src="someimg.jpg" width="100" height="100" /> </span>
<span>some text</span>
</div>
precedente risposta "corretta" alla mia domanda stava dando risultato sbagliato a <span> <br> Some text</span>
. Altre risposte erano sbagliate dopo aver provato un po '.
Vedi il mio JSfiddle: http://jsfiddle.net/EGVQH/2/
ha a essere ricorsiva? – Aprillion
penso che dovrebbe essere. perché il livello di nidificazione può essere di 10-20 elementi, quindi 20+ "per" cerchi sono cattivi :) – Feanor
se un elemento non ha innerText, nessuno dei suoi figli ne ha, quindi dopo il test per le immagini il genitore superiore può essere rimosso in sicurezza senza controllare i bambini .. o cosa mi manca qui? – Aprillion