如何从jQuery选择器中排除$(this)?


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)使用更简单的代码。
2015年

Answers:


390

尝试使用not() 方法而不是:not()选择器

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

为什么我不能使它正常工作... $(“#menu-holder #first_level li”)。not(this).addClass(“ returnToParent”);
马克2012年

4
@marck没有上下文,我不知道。提出一个新问题,我也许可以提供帮助。
Dan Herbert

2
这是一个非常糟糕的解决方案(在性能方面)。没有真正的理由$(".content a")进入click回调内部...
每次


9

您还可以使用jQuery .siblings()方法:

的HTML

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

Java脚本

$(".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;
}

Java脚本

$(".content a").click(function() {
  var current = $(this).parent();
  current.removeClass('other')
    .siblings()
    .addClass('other');
});

看到这里:http : //jsfiddle.net/3bzLV/1/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.