Bagaimana saya bisa mengecualikan $ (ini) dari pemilih jQuery?

203

Saya punya sesuatu seperti ini:

<div class="content">
    <a href="#">A</a>
</div>
<div class="content">
    <a href="#">B</a>
</div>
<div class="content">
    <a href="#">C</a>
</div>

Ketika salah satu tautan ini diklik, saya ingin menjalankan fungsi .hide () pada tautan yang tidak diklik. Saya mengerti jQuery memiliki: not selector, tapi saya tidak tahu bagaimana menggunakannya dalam kasus ini karena saya perlu memilih tautan menggunakan$(".content a")

Saya ingin melakukan sesuatu seperti

$(".content a").click(function()
{
    $(".content a:not(this)").hide("slow");
});

tapi saya tidak tahu cara menggunakan: tidak memilih dengan benar dalam hal ini.

Logan Serman
sumber
3
coba !$(this)untuk kode yang lebih sederhana.
Ari

Jawaban:

390

Coba gunakan not() metode, bukan :not()pemilih .

$(".content a").click(function() {
    $(".content a").not(this).hide("slow");
});
Dan Herbert
sumber
Mengapa saya tidak bisa menjalankan ini ... $ ("# menu-holder #first_level li"). Bukan (ini) .addClass ("returnToParent");
marck
4
@marck Tanpa konteks, saya tidak tahu. Buat pertanyaan baru dan saya mungkin bisa membantu.
Dan Herbert
2
Ini adalah solusi yang sangat buruk (kinerja-bijaksana). Tidak ada alasan kuat untuk $(".content a")melakukan clickcallback ... pada SETIAP klik ...
Ronen Cypis
42

Anda dapat menggunakan notfungsi daripada :notpemilih:

$(".content a").not(this).hide("slow")
Zach Langley
sumber
9

Anda juga dapat menggunakan .siblings()metode jQuery :

HTML

<div class="content">
  <a href="#">A</a>
  <a href="#">B</a>
  <a href="#">C</a>
</div>

Javascript

$(".content").on('click', 'a', function(e) {
  e.preventDefault();
  $(this).siblings().hide('slow');
});

Demo kerja: http://jsfiddle.net/wTm5f/

Edgar Ortega
sumber
5

Anda harus menggunakan metode "siblings ()", dan mencegah menjalankan pemilih ".content a" berulang-ulang hanya untuk menerapkan efek itu:

HTML

<div class="content">
    <a href="#">A</a>
</div>
<div class="content">
    <a href="#">B</a>
</div>
<div class="content">
    <a href="#">C</a>
</div>

CSS

.content {
    background-color:red;
    margin:10px;
}
.content.other {
    background-color:yellow;
}

Javascript

$(".content a").click(function() {
  var current = $(this).parent();
  current.removeClass('other')
    .siblings()
    .addClass('other');
});

Lihat di sini: http://jsfiddle.net/3bzLV/1/

Ronen Cypis
sumber