我的网站中的每个链接都会触发一个事件。
但我希望它不会在我打开了 class='nofocus' 的链接上触发。
例如
<a>link</a>
<a class='nofocus'>register</a>
$('a').live('click', function() {
$('#searchbox').focus();
}
如何重写 $('a) 以便第二个链接不会触发该事件?
最佳答案
理论上,有三种选择。
1。使用“属性不等于”选择器
“属性不等于”选择器匹配不具有指定属性或具有指定属性但不具有特定值的元素。
$('a[class!=nofocus]')
只有当您不在A
上使用多个类时,这才有效。标记中的元素,例如<a href="foo" class="nofocus bla bar baz">foo</a>
。
参见Selectors/attributeNotEqual在 jQuery 文档中了解更多信息。
2。使用.not()
另一个选项是选择所有 A
首先元素,然后过滤结果,删除带有 class="nofocus"
的元素从结果集中。
$('a').not('.nofocus')
这更加灵活,因为它允许在 A
上使用多个类元素。
此外,它比在 Firefox 中使用 The Attribute Not Equal To Selector™ 稍快,但在 Safari 中稍慢。
参见Traversing/not在 jQuery 文档中了解更多信息。
3。使用:not()
选择器
最快(也是最短)的选项是使用 the :not
selector :
$('a:not(.nofocus)')
此外,我的测试指出,这是迄今为止这三种方法中最快的方法 - 比使用不等于选择器的属性快两倍多!
三种方案的性能比较
我创建了一个 jsPerf 测试用例,以便您可以自己测试: http://jsperf.com/get-elements-without-specific-class 。
<小时/>TL;DR:使用$('a:not(.nofocus)')
.
关于javascript - jquery选择器帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1994537/