Jak mogę wykluczyć $ (this) z selektora jQuery?

203

Mam coś takiego:

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

Po kliknięciu jednego z tych łączy chcę wykonać funkcję .hide () na linkach, które nie zostały kliknięte. Rozumiem, że jQuery ma: nie selektora, ale nie mogę wymyślić, jak go użyć w tym przypadku, ponieważ konieczne jest wybranie linków za pomocą$(".content a")

Chcę zrobić coś takiego

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

ale nie mogę wymyślić, jak prawidłowo użyć selektora: w tym przypadku.

Logan Serman
źródło
3
spróbuj !$(this)prostszego kodu.
Ari

Odpowiedzi:

390

Spróbuj użyć not() metody zamiast :not()selektora .

$(".content a").click(function() {
    $(".content a").not(this).hide("slow");
});
Dan Herbert
źródło
Dlaczego nie mogę tego uruchomić ... $ ("# menu-holder #first_level li"). Not (this) .addClass ("returnToParent");
marck
4
@marck Bez kontekstu nie wiem. Utwórz nowe pytanie, a być może będę w stanie pomóc.
Dan Herbert
2
To bardzo złe rozwiązanie (pod względem wydajności). Nie ma prawdziwy powód do $(".content a")wewnątrz clickzwrotnego ... na każde kliknięcie ...
Ronen Cypis
42

Możesz użyć notfunkcji zamiast :notselektora:

$(".content a").not(this).hide("slow")
Zach Langley
źródło
9

Możesz także użyć .siblings()metody 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');
});

Działające demo: http://jsfiddle.net/wTm5f/

Edgar Ortega
źródło
5

Powinieneś użyć metody „siblings ()” i zapobiegać uruchamianiu selektora „.content a” w kółko tylko w celu zastosowania tego efektu:

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');
});

Zobacz tutaj: http://jsfiddle.net/3bzLV/1/

Ronen Cypis
źródło