2012-02-07 5 views
11

私は全要素をひとつの要素とその子要素を除いてすべて削除しようとしています。どうすればこれを達成できますか?jQuery - 単一の要素とその子を除くすべてを選択しますか?

編集1 は、次のマークアップ考えてみましょう:それは要素が含まれているため、上記の例では

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

を、私は子供たちだけでなく、DIV1、DIV3やDIV4を削除しますが、DIV2を節約したいです削除しないでください。

答えて

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

あなたは

+0

しかし、要素の深さが身体の直接の子供よりも深い場合はどうなりますか? –

+0

要素を削除するとすべての子要素も削除されます –

+0

はい、それは私が意味することではありません。私は元のquestonのビットを明確にしました。 –

4

を維持したいものは何でもしていない()の部分を置き換えることができますあなたはこのようにそれを行うことができます。あなたの要素はid="dondelete"を持っており、体の子である

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

1

これは古い質問ですが、受け入れ答えが間違っている

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

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

+0

誰がこれらをupvotes?これは 'body'要素だけを選択します。 – kapa

+0

@bazmegakapaがテストされて修正されました –

+1

これは、以前に投稿された他の(すでに正しい)ソリューションと同じですので、あなたのものを削除することは公正でしょう。私はdownvoteを削除しました。 – kapa

3

を試してみてください。この状況では動作しません(http://jsfiddle.net/LVb3V/を参照)、確かに一般的な解決策ではありません。

使用することをお勧め:

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

これは、DIV2とそれに含まれるすべての要素を除いて、体内のすべての要素を削除します。

+1

ありがとう!これは容認された解決策でなければなりません。ここでの大きな違いはjqueryです。セレクタでnotを使用する代わりに "not"を選択します。 –

0

私は

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

はそれを集中する最も簡単な方法だと思います。

http://jsfiddle.net/6vb2va6g/

0

このコードは私のために働いた。 *:と:の間にスペースを入れる必要があります。以前はコードを使用しようとしたとき

$('body > *:not(#123)').remove()それは動作しませんでした。私は*と:の間にスペースを入れなければなりませんでした。

ハッピーコーディング。

関連する問題