Как я могу исключить $ (это) из селектора jQuery?

203

У меня есть что-то вроде этого:

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

Когда нажата одна из этих ссылок, я хочу выполнить функцию .hide () для ссылок, которые не были нажаты. Я понимаю, что в jQuery есть селектор: not, но я не могу понять, как его использовать в этом случае, потому что необходимо выбрать ссылки, используя$(".content a")

Я хочу сделать что-то вроде

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

но я не могу понять, как правильно использовать селектор: not в этом случае.

Логан Серман
источник
3
попробуйте !$(this)для более простого кода.
Ари

Ответы:

390

Попробуйте использовать not() метод вместо :not()селектора .

$(".content a").click(function() {
    $(".content a").not(this).hide("slow");
});
Дэн Герберт
источник
Почему я не могу заставить это работать ... $ ("# menu-holder #first_level li"). Not (this) .addClass ("returnToParent");
Магск
4
@ Марк Без контекста, я не знаю. Создайте новый вопрос, и я смогу помочь.
Дэн Герберт
2
Это очень плохое решение (с точки зрения производительности). Там нет никаких реальных оснований $(".content a")внутри clickобратного вызова ... на каждый клик ...
Ронен Cypis
42

Вы можете использовать notфункцию вместо :notселектора:

$(".content a").not(this).hide("slow")
Зак Лэнгли
источник
9

Вы также можете использовать .siblings()метод 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');
});

Рабочая демонстрация: http://jsfiddle.net/wTm5f/

Эдгар Ортега
источник
5

Вы должны использовать метод "siblings ()" и не допускать многократного запуска селектора ".content a" только для применения этого эффекта:

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

Смотрите здесь: http://jsfiddle.net/3bzLV/1/

Ронен Сайпис
источник