我是否有更聪明的方法可以$self
使用foo
而不是$('.foo.bar')
中使用$('.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..
});
?感觉就像额外的foo是redundent。我不想透过我已经找到的一些选择器进行查看。
<div class="foo bar">
</div>
修改:
标记代码:
$('.foo.bar')
注意foo
在bar
和{{1}}之间没有空格。
答案 0 :(得分:1)
所有当前答案都假定点击的.foo
将是仅 .foo
,其中包含bar
类。
...如果情况总是如此,那么很好,但请注意,这些答案不是直接替换你所拥有的(因为你寻找所有 .foo
与班级bar
)。以下 将更多直接替换:
var foos = $('.foo').on('click', function () {
$self = $(this);
foos.filter('.bar').removeClass('bar');
});
...但请注意,此代码仍然 不是直接替换,因为您的代码将获得.foo
的 in点击事件被触发时的DOM ,而我建议的替代方案将在点击事件被绑定时获得.foo
的 。
此外,在删除该类之前检查jQuery元素是否具有类是多余的;如果你告诉它从一个元素中删除一个不存在的类,jQuery就不会barf;它不会做任何事情。
if (self.hasClass('bar')) {
self.removeClass('bar');
}
......相反,只需这样做:
self.removeClass('bar');
答案 1 :(得分:0)
方法1 hasClass()
$self.hasClass("bar") && $self.removeClass('bar');
方法2 is()
$seld.is(".bar") && $self.removeClass('bar');
方法3 filter()
$seld.filter(".bar").removeClass('bar');
答案 2 :(得分:0)
您可以使用is
或hasClass
来检查当前元素是否也包含bar
类:
$('.foo').on('click', function () {
$self = $(this);
$self.is('.bar') && $self.removeClass('bar');
});
答案 3 :(得分:0)
使用这个简单的逻辑:If X has a class Y, remove class Y from X.
以下是代码:
$('.foo').on('click', function () {
$self = $(this);
if($self.hasClass('bar'))
$self.removeClass('bar');
});
电文读出:
答案 4 :(得分:0)
如果您为每个父元素使用id,则可以使用以下内容:
$('.foo').on('click', function () {
$('#'+this.id).removeClass('bar'); // it will remove child class bar
)};