jQueryセレクターではなく、$(this)以外をすべて非表示にします


97

高度なタイトル、簡単な質問:

jQueryで次のようにするにはどうすればよい$(this)ですか(を除くすべてを非表示にします)?

$("table tr").click(function() {
    $("table tr:not(" + $(this) + ")").hide();
    // $(this) is only to illustrate my problem

    $("table tr").show();
});

回答:



157
$("table.tr").not(this).hide();

余談ですが、私はあなたが$("table tr")(ドットの代わりにスペースを使って)という意味だと思います。
あなたがそれを持っている方法では、それはtr(例えば、<table class="tr">では、それはおそらくあなたが望むものではない)のます。

詳細については、ドキュメントを参照してください。


ええ、それはドットの間違いでした。私はどういうわけか、これがよりクリーンに見えるアレクサンダーのソリューションよりも簡単であることを確認できませんでした。私は:notでそれを行う方法を尋ねたのを知っていますが、兄弟の方法はもっときれいに見えます。
Kordonme 2009

3
あなたは、使用してみてください、それはあなたがクリックした項目を含む行を除くすべてのテーブルの行を非表示に取得するために、テーブル内の何かをクリックしている場合だけで、追加する:$('tr').not($(this).closest('tr')).hide();
神保

3
これは、兄弟が許可するよりも構造が複雑な場合に、特定の要素を選択するのに役立ちます。例を考え出すのに苦労していますが、グリッド自体ではなく、グリッド内にあるものを非表示にする必要があるかもしれません。
goodeye 2013

6

not()を他のセレクターと組み合わせる場合は、add()を使用できます。

$('a').click(function(e){
  $('a').not(this).add('#someID, .someClass, #someOtherID').animate({'opacity':0}, 800);
});

これは他のすべてのリンクをフェードアウトしますが、クリックされたリンクをフェードアウトし、さらにいくつかの選択されたIDとクラスをフェードアウトします。


0

私はこれが解決策になると思います:

$("table.tr").click(function() {
    $("table.tr:not(" + $(this).attr("id") + "").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})

-コメントの編集:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})

つまり:not(#" + ...。また、要素にIDがない場合、これは機能しません。
SLaks、2009

3
これには、すべてのテーブル行(または使用しているもの)にランダムで不要なIDを追加する必要があります。
nickf 2009

@ SLaks、訂正ありがとうございます。ダウで、あなたは時々私たちが求めるものが助けるためのクイックアンサーを持っていることであると心に留めているかもしれません。私たちが置いたものを軽く取ってみませんか。
アンドレスdescalzo

@nickf、はい、そうですが、そのコメントは、最初に@Kordonmeに各TRのIDがあるかどうかを尋ねるのに適しています。
andres descalzo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.