我在我网站的每个链接上都有一个触发事件。
但是我希望它不会触发我已经开启class ='nofocus'的链接。
例如
<a>link</a>
<a class='nofocus'>register</a>
$('a').live('click', function() {
$('#searchbox').focus();
}
如何重写$('a)以便第二个链接不会触发事件?
答案 0 :(得分:11)
理论上,有三种选择。
“属性不等于”选择器匹配的元素既没有指定的属性,也没有指定的属性但没有特定的值。
$('a[class!=nofocus]')
只有在标记中的A
元素上不使用多个类时才会有效,例如<a href="foo" class="nofocus bla bar baz">foo</a>
。
有关详细信息,请参阅jQuery文档中的Selectors/attributeNotEqual。
.not()
另一种选择是首先选择所有A
元素,然后过滤结果,从结果集中删除class="nofocus"
元素。
$('a').not('.nofocus')
这更灵活,因为它允许在A
元素上使用多个类。
此外,它比在Firefox中使用“不等于选择器的属性”略快,但在Safari中稍慢。
有关详细信息,请参阅jQuery文档中的Traversing/not。
: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)