Como posso excluir $ (this) de um seletor jQuery?

203

Eu tenho algo parecido com isto:

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

Quando um desses links é clicado, desejo executar a função .hide () nos links que não são clicados. Entendo que o jQuery possui o seletor: not, mas não consigo descobrir como usá-lo neste caso, porque é necessário selecionar os links usando$(".content a")

Eu quero fazer algo como

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

mas não consigo descobrir como usar o seletor: not corretamente neste caso.

Logan Serman
fonte
3
tente !$(this)um código mais simples.
Ari

Respostas:

390

Tente usar o not() método em vez do :not()seletor .

$(".content a").click(function() {
    $(".content a").not(this).hide("slow");
});
Dan Herbert
fonte
Por que não consigo fazer isso funcionar ... $ ("# menu-holder #first_level li"). Not (this) .addClass ("returnToParent");
Marck
4
@ marck Sem contexto, eu não sei. Crie uma nova pergunta e talvez eu possa ajudar.
Dan Herbert
2
Esta é uma solução muito ruim (em termos de desempenho). Não há motivo real para $(".content a")entrar no clickretorno de chamada ... em TODOS os cliques ...
Ronen Cypis
42

Você pode usar a notfunção em vez do :notseletor:

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

Você também pode usar o .siblings()método 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');
});

Demonstração de trabalho: http://jsfiddle.net/wTm5f/

Edgar Ortega
fonte
5

Você deve usar o método "siblings ()" e impedir a execução do seletor ".content a" repetidamente apenas para aplicar esse efeito:

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

Veja aqui: http://jsfiddle.net/3bzLV/1/

Ronen Cypis
fonte