2009-08-11 13 views
11

C'è un modo per svuotare un div lasciando solo gli elementi con un nome di classe specifico? O c'è un modo per rimuovere tutti gli elementi all'interno di un div lasciando solo gli elementi con una classe specificata?Jquery vuoto() div eccetto per gli elementi abbinati

+0

se la risposta di Marve risolve il problema si dovrebbe accettarlo, facendo clic sul segno di spunta vicino alla sua risposta. – SilentGhost

risposta

39

Questo dovrebbe fare il trucco:

$('#theDiv').find('*').not('.className').remove(); 

Esempio di marcatura:

<div id="theDiv"> 
    <p>this will be removed</p> 
    <p class="className">this will stay</p> 
</div> 
+0

@Jason - Sono tutto per la risposta di Marve - ma se entrambi funzionassero? Dovrebbe accettare la risposta che gli è più utile. – karim79

1

@ modo di Marve è probabilmente meglio, ma qui è un altro in ogni modo (usando filter):

$("#yourDiv").html($('#yourDiv').filter('.IWantThisClass, .IWantThisToo').html()); 
1

prova questo

$('#theDiv').find('*:not(".className")').remove(); 
2

Ecco un'altra opzione utilizzando solo selettori di jQuery:

$("#theDiv *:not('.className')").remove(); 

Il problema con un metodo come questo e di quelli di cui sopra è se ci sono elementi figli saranno anche rimossi, ad esempio:

<div id="theDiv"> 
    <p>this will be removed</p> 
    <p class="className"><strong>this will also be removed :(</strong></p> 
</div> 

il questo verrà rimosso anche :( testo saranno rimossi, così perché è abbinato il carattere jolly * e non ha la classe className. Al fine di risolvere questo vorremmo filtrare solo i figli diretti della controllante, come ad esempio:

$("#theDiv > *:not('.className')").remove(); 
+1

Grazie. Questa risposta è molto meglio di quella accettata IMO. – Demnogonis

Problemi correlati