jquery选择器帮助

时间:2010-01-03 10:26:29

标签: javascript jquery

我在我网站的每个链接上都有一个触发事件。

但是我希望它不会触发我已经开启class ='nofocus'的链接。

例如

 <a>link</a>
 <a class='nofocus'>register</a>

 $('a').live('click', function() {
     $('#searchbox').focus();
 }

如何重写$('a)以便第二个链接不会触发事件?

4 个答案:

答案 0 :(得分:11)

理论上,有三种选择。

1。使用“属性不等于”选择器

“属性不等于”选择器匹配的元素既没有指定的属性,也没有指定的属性但没有特定的值。

$('a[class!=nofocus]')

只有在标记中的A元素上不使用多个类时才会有效,例如<a href="foo" class="nofocus bla bar baz">foo</a>

有关详细信息,请参阅jQuery文档中的Selectors/attributeNotEqual

2。使用.not()

另一种选择是首先选择所有A元素,然后过滤结果,从结果集中删除class="nofocus"元素。

$('a').not('.nofocus')

这更灵活,因为它允许在A元素上使用多个类。

此外,它比在Firefox中使用“不等于选择器的属性”略快,但在Safari中稍慢。

有关详细信息,请参阅jQuery文档中的Traversing/not

3。使用:not()选择器

最快(也是最短)选项是使用the :not selector

$('a:not(.nofocus)')

另外,我的测试指出,这是三者中最快的方法 - 比使用不等于选择器的属性快两倍!

三个选项的性能比较

我创建了一个jsPerf测试用例,您可以自行测试: http://jsperf.com/get-elements-without-specific-class


TL; DR:使用$('a:not(.nofocus)')

答案 1 :(得分:7)

尝试:not()选择器(docs):

$('a:not(.nofocus)').live('click', function() {
    $('#searchbox').focus();
}

答案 2 :(得分:1)

选择器:$(“a:not(.nofocus)”)将选择没有nofocus类的所有链接。 使用$(“a:first”)。 http://docs.jquery.com/Selectors/first获得第一个。

答案 3 :(得分:1)

$('a:not(.nofocus)')

应该做的工作

http://docs.jquery.com/Selectors/not