Comment exclure $ (this) d'un sélecteur jQuery?

203

J'ai quelque chose comme ça:

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

Lorsque l'un de ces liens est cliqué, je souhaite exécuter la fonction .hide () sur les liens qui ne sont pas cliqués. Je comprends que jQuery a le sélecteur: not, mais je ne sais pas comment l'utiliser dans ce cas car il est nécessaire que je sélectionne les liens en utilisant$(".content a")

Je veux faire quelque chose comme

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

mais je ne peux pas comprendre comment utiliser le sélecteur: pas correctement dans ce cas.

Logan Serman
la source
3
essayez !$(this)un code plus simple.
Ari

Réponses:

390

Essayez d'utiliser la not() méthode au lieu du :not()sélecteur .

$(".content a").click(function() {
    $(".content a").not(this).hide("slow");
});
Dan Herbert
la source
Pourquoi ne puis-je pas faire fonctionner cela ... $ ("# titulaire du menu #first_level li"). Not (this) .addClass ("returnToParent");
marck
4
@marck Sans contexte, je ne sais pas. Créez une nouvelle question et je pourrai peut-être vous aider.
Dan Herbert
2
Il s'agit d'une très mauvaise solution (en termes de performances). Il n'y a aucune vraie raison à l' $(".content a")intérieur du clickrappel ... à CHAQUE clic ...
Ronen Cypis
42

Vous pouvez utiliser la notfonction plutôt que le :notsélecteur:

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

Vous pouvez également utiliser la .siblings()méthode 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');
});

Démo de travail: http://jsfiddle.net/wTm5f/

Edgar Ortega
la source
5

Vous devez utiliser la méthode "siblings ()" et empêcher d'exécuter le sélecteur ".content a" encore et encore juste pour appliquer cet effet:

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

Voir ici: http://jsfiddle.net/3bzLV/1/

Ronen Cypis
la source