Sembunyikan semua kecuali $ (ini) melalui: bukan di jQuery selector

97

Judul lanjutan, pertanyaan sederhana:

Bagaimana saya bisa melakukan hal berikut di jQuery (menyembunyikan semuanya kecuali $(this))?

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

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

Jawaban:

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

Sebagai tambahan, saya pikir yang Anda maksud $("table tr")(dengan spasi, bukan titik).
Cara Anda memilikinya, ia memilih setiap tabel yang memiliki kelas tr(misalnya, <table class="tr">), yang mungkin bukan yang Anda inginkan.

Untuk informasi lebih lanjut, lihat dokumentasi .

SLaks
sumber
Ya, itu adalah kesalahan dengan titiknya. Saya entah bagaimana gagal untuk melihat bagaimana ini lebih mudah daripada solusi Alexanders, yang tampaknya lebih bersih. Saya tahu saya bertanya bagaimana melakukannya dengan: tidak, tetapi metode saudara sepertinya lebih bersih.
Kordonme
3
Sebagai tambahan, jika Anda mengklik sesuatu di dalam tabel untuk mencoba dan membuatnya menyembunyikan semua baris tabel KECUALI baris yang berisi item yang Anda klik, gunakan:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Ini berguna untuk memilih elemen tertentu, jika strukturnya lebih kompleks daripada yang diizinkan oleh saudara kandung. Saya kesulitan memberikan contoh, tetapi mungkin sesuatu di mana Anda ingin menyembunyikan sesuatu di dalam kotak, tetapi bukan kotak itu sendiri.
goodeye
6

Jika Anda ingin menggabungkan not () dengan beberapa penyeleksi lain, Anda dapat menggunakan add ():

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

Ini akan memudarkan semua tautan lainnya, tetapi tautan yang diklik, dan juga memudarkan beberapa id dan kelas yang dipilih.

lenooh
sumber
0

Saya pikir solusinya bisa seperti ini:

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

--EDIT untuk Komentar:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})
andres descalzo
sumber
Maksudmu :not(#" + .... Selain itu, ini tidak akan berfungsi kecuali elemen tersebut memiliki ID, yang kemungkinan besar tidak terjadi.
SLaks
3
ini akan mengharuskan Anda untuk menambahkan id acak dan tidak perlu ke semua baris tabel Anda (atau apa pun yang Anda gunakan).
nickf
@ SLaks, Terima kasih atas koreksinya. Mungkin Anda berpikir bahwa terkadang yang kita cari adalah memiliki Jawaban Cepat untuk membantu. Mengapa tidak menganggap enteng apa yang kita taruh.
andres descalzo
@nickf, Ya, Anda benar, tetapi komentar itu akan lebih baik jika ditanyakan kepada @Kordonme terlebih dahulu apakah mereka memiliki ID untuk setiap TR.
andres descalzo