Wie kann ich $ (this) von einem jQuery-Selektor ausschließen?

203

Ich habe so etwas:

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

Wenn auf einen dieser Links geklickt wird, möchte ich die Funktion .hide () für die Links ausführen, auf die nicht geklickt wird. Ich verstehe, dass jQuery den Selektor: not hat, aber ich kann nicht herausfinden, wie ich ihn in diesem Fall verwenden soll, da ich die Links mit auswählen muss$(".content a")

Ich möchte so etwas tun

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

aber ich kann nicht herausfinden, wie man den: nicht-Selektor in diesem Fall richtig benutzt.

Logan Serman
quelle
3
versuchen Sie es !$(this)mit einfacherem Code.
Ari

Antworten:

390

Versuchen Sie es mit der not() Methode anstelle des :not()Selektors .

$(".content a").click(function() {
    $(".content a").not(this).hide("slow");
});
Dan Herbert
quelle
Warum kann ich das nicht zum Laufen bringen ... $ ("# Menühalter #first_level li"). Not (this) .addClass ("returnToParent");
März
4
@marck Ohne Kontext weiß ich es nicht. Erstellen Sie eine neue Frage, und ich kann Ihnen möglicherweise helfen.
Dan Herbert
2
Dies ist eine sehr schlechte Lösung (in Bezug auf die Leistung). Es gibt keinen wirklichen Grund, $(".content a")innerhalb des clickRückrufs ... bei JEDEM Klick ...
Ronen Cypis
42

Sie können die notFunktion anstelle des :notSelektors verwenden:

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

Sie können auch die jQuery- .siblings()Methode verwenden:

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

Arbeitsdemo: http://jsfiddle.net/wTm5f/

Edgar Ortega
quelle
5

Sie sollten die Methode "Geschwister ()" verwenden und verhindern, dass der Selektor ".content a" immer wieder ausgeführt wird, nur um diesen Effekt anzuwenden:

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

Siehe hier: http://jsfiddle.net/3bzLV/1/

Ronen Cypis
quelle