更新 2:
在这里总结一些其他的cmets。答案是视情况而定。
jQuery 的选择器引擎 Sizzle 评估选择器的方式与 CSS 相同:from right to left。所以一般来说,最好在右侧非常具体,在左侧不太具体。
但这也取决于 HTML 的结构以及您要查找的元素的分散程度。
如果你有
a
|
...
|
b
-----------------
| |
d d d c c c c c c c c c c c c c c c c c c c
然后更具体更快$('a b > c'),因为您正在减少使用b > c 的元素集,并且不必检查每个c 的a 继承。
如果你有
a
|
...
|
b
-----------------
| |
e e e e e e e e d d c c c c c c e e e e e e
那么$('a c') 会更快,因为选择器更简单,并且在这种情况下测试c 是否是b 的子级是多余的(当然你甚至可以使用$('c'))。
原答案:
不管哪一个更快,如果你必须一遍又一遍地访问一个元素,存储一个对它的引用:
var $element = $('#myId .someElement');
$('some other selector').each(function() {
// access $element here
});
The first selector seems to be a bit faster(在 Chrome 8 中)。
在较新的浏览器(支持querySelectorAll)中,差异可能没有不支持它的浏览器那么大。
更新:
我认为这主要取决于 jQuery 可以使用多少内置方法。所以假设querySelector*不可用,第一个选择器可以翻译成
document.getElementById('myId')[0].getElementsByClassName('someElement')
对于第二个选择器,jQuery 必须额外检查一个元素是否确实是一个子元素。 IE。涉及更多处理。