2012-02-07 16 views
11

Tek bir eleman ve çocukları dışında, tüm vücuttaki her şeyi kaldırmaya çalışıyorum. Bunu nasıl başarabilirim?jQuery - Tek bir eleman ve çocukları hariç her şeyi seçin.

düzenleme 1 şu işaretlemeyi düşünün: o elemanı içerdiğinden Yukarıdaki örnekte

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

, onların çocukları, hem de div1, DIV3 ve div4 kaldırmak, ancak DIV2 tasarruf etmek istiyorum kaldırmamak için.

cevap

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

Sen

+0

Peki ya elemanların derinliği, bedenin doğrudan çocuklarından daha derinse? –

+0

Bir öğenin kaldırılması tüm çocukları da kaldıracak –

+0

Evet, ama demek istediğim bu değil. Orijinal questonda biraz açıklığa kavuştum. –

4

tutmak istediğini ile değil() kısmının yerini alabilecek Böyle yapabilirsiniz: senin eleman id="dondelete" vardır ve vücudun bir çocuk

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

.

1

Bu eski bir soru ama kabul cevap yanlış

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

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

+0

Bunları kim alıyor? Bu sadece 'vücut' elemanının kendisini seçecektir. – kapa

+0

@bazmegakapa test edilmiş ve düzeltilmiştir –

+1

Şimdi, daha önce yayınlanan diğer (zaten doğru) çözümlerle aynıdır, bu yüzden sizinkileri silmek adil olacaktır. Reddetmeyi kaldırdım. – kapa

3

deneyin. Bu durumda çalışmaz (bkz. http://jsfiddle.net/LVb3V/) ve kesinlikle genel bir çözüm olarak değil. Daha iyi

kullanmak:

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

Bu DIV2 hariç vücuttaki tüm elemanları ve içerdiği tüm unsurları ortadan kaldıracaktır.

+1

Teşekkürler! Bu kabul edilen çözüm olmalı. Burada büyük fark jquery ".değil "yerine seçici kullanıyorum. –

0

Ben

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

onu odaklanmak için en kolay yol olduğunu düşünüyorum.

http://jsfiddle.net/6vb2va6g/

0

Bu kod benim için çalıştı.

(012)

* ile: arasında boşluk bırakmanız gerekir. Daha sonra, kodu

$('body > *:not(#123)').remove() ile kullanmayı denediğinizde işe yaramadı. * Ve: karakter arasında boşluk bırakmak zorunda kaldım.

Mutlu kodlama.

İlgili konular