连接 CSS 个选择器

Concatenate CSS selectors

有没有更聪明的方法让我可以使用 $self 而不是在 $('.foo.bar')... 中使用 foo?感觉额外的 foo 是多余的。我不想查看我已经找到的一些选择器。

$('.foo').on('click', function () {
    $self = $(this);
    $('.foo.bar').removeClass('bar'); // Works but feels wrong.
    //$self('bar').removeClass('bar'); // Use something that doesn't uses 'foo' again..
});

编辑:

标记代码:

<div class="foo bar">
</div>

注意 $('.foo.bar')foobar 之间没有空格。

方法一hasClass()

$self.hasClass("bar") && $self.removeClass('bar');

方法二is()

$seld.is(".bar")  && $self.removeClass('bar');

方法三filter()

$seld.filter(".bar").removeClass('bar');

您可以使用 ishasClass 来检查当前元素是否也有 bar class:

$('.foo').on('click', function () {
    $self = $(this);
    $self.is('.bar') && $self.removeClass('bar');
});

使用这个简单的逻辑:If X has a class Y, remove class Y from X.

代码如下:

$('.foo').on('click', function () {

    $self = $(this);

    if($self.hasClass('bar'))
        $self.removeClass('bar');

});

阅读:

如果您为每个父元素使用 id,您可以使用类似 :

$('.foo').on('click', function () {
   $('#'+this.id).removeClass('bar'); // it will remove child class bar
)};

当前的所有答案都假定单击的 .foo 将是 .foo 和 class bar.

...如果情况总是如此,那就太好了,但请注意,这些答案 不是 直接替代您所得到的(因为您正在寻找 所有 .foo 与 class bar)。以下 more 直接替换:

var foos = $('.foo').on('click', function () {
    $self = $(this);

    foos.filter('.bar').removeClass('bar');
});

... 但请注意,此代码 still 不是 直接替换,因为您的代码将获得 .foo 在 DOM 触发点击事件时 ,而我建议的替代方案将获得 .foo在绑定点击事件的时候.


此外,在删除 class 之前检查 jQuery 元素是否具有 class 有点多余;因为如果您告诉它从元素中删除不存在的 class,jQuery 不会呕吐;它什么也做不了。

if (self.hasClass('bar')) {
    self.removeClass('bar');
}

...相反,只需这样做:

self.removeClass('bar');