2012-02-07 17 views
11

Sto provando a rimuovere tutto in tutto il corpo, ad eccezione di un singolo elemento e dei suoi figli. Come posso realizzare questo?jQuery - Seleziona tutto tranne un singolo elemento e i suoi figli?

Modifica 1 Si consideri il seguente markup:

<html> 
    <body> 
     <div id="div1"></div> 
     <div id="div2"> 
     <div id="elementNotToRemove"></div> 
     </div> 
     <div id="div3"></div> 
     <div id="div4"></div> 
    </body> 
</html> 

Nell'esempio di cui sopra, io voglio rimuovere div1, div3 e DIV4, così come i loro figli, ma conservare div2 perché contiene l'elemento non rimuovere.

risposta

19
$("body > *").not("body > #elementtokeep").remove(); 

È possibile sostituire la parte non() con tutto ciò che si desidera conservare

+0

Ma se la profondità degli elementi fosse più profonda dei soli figli diretti del corpo? –

+0

Rimuovere un elemento rimuoverà anche tutti i bambini –

+0

Sì, ma non è quello che intendo. Ho chiarito un po 'il queston originale. –

4

Si può fare in questo modo:

$('body > *:not(#dondelete)').remove(); 

Dove il vostro elemento ha id="dondelete" ed è un bambino di corpo .

1

Prova

$('body > *:not(#123)').remove() 

http://api.jquery.com/not-selector/

+0

Chi li inventa? Questo selezionerà solo l'elemento 'body' stesso. – kapa

+0

@bazmegakapa testato e corretto –

+1

Ora è lo stesso di altre (già corrette) soluzioni pubblicate in precedenza, quindi sarebbe giusto cancellare il tuo. Ho rimosso il downvote però. – kapa

3

Questa è una vecchia questione, ma la risposta accettata è sbagliata. Non funziona in questa situazione (vedi http://jsfiddle.net/LVb3V/) e certamente non come soluzione generale.

meglio usare:

$('body *').not('#div2, #div2 *').remove()​;

Questo eliminerà tutti gli elementi del corpo ad eccezione di div2 e tutti gli elementi in esso contenuti.

+1

Grazie! Questa dovrebbe essere la soluzione accettata. La grande differenza qui è la jquery ".non "invece di usare non nel selettore. –

0

penso che

$("body *").not("body #div2") 
      .not("body #div2 #elementtokeep") 
      .not("body #div2 #elementtokeep *") 
      .remove(); 

è il modo più semplice per focalizzarla.

http://jsfiddle.net/6vb2va6g/

0

Questo codice ha funzionato per me.

$('body > * :not(#123)').remove() 

È necessario lasciare spazio tra * e:. In precedenza, quando tenta di utilizzare il codice con

$('body > *:not(#123)').remove() non ha funzionato. Dovevo dare spazio tra * e: carattere.

Felice codifica.

Problemi correlati