只是感兴趣,哪一个更快?无法谷歌了。
例如,$('li:first')
vs $('li').first()
答案 0 :(得分:3)
更新:显然解析表达式会产生大量开销。
我的quick benchmark .first()
比使用选择器快得多。
表达式简单地归结为$ .expr对象like explained here
上的方法实际执行:first vs .first()有点不同:
以下代码:首先在$.expr.setFilters.first
function ( elem, i ) {
return i === 0;
}
虽然$.fn.first
只是.eq(0)
的缩写:
function () {
return this.eq( 0 );
}
没有查看实际的代码我会实现第一个(),如果它不存在那样:
$.extend($.expr[':'],{
first: function(a) {
return $(a).first();
}
});
这也意味着:首先只是元素列表上的过滤器,而.first()是一个效率更高的reduce操作。
Update2 :Doh - 应该有read the docs。由于jQuery尝试在现代浏览器中使用本机CSS选择器,并且:first
没有来自CSS规范的选择器,它总是比可以利用浏览器本机CSS搜索方法的真实选择器更糟糕(而jQuery具有在JS中模仿那种行为
答案 1 :(得分:1)
$('li').first()
比使用$('li:first')
快十倍。
使用Firefox 3.6
进行测试。
100,000 iterations:
55,870ms using :first
5,858ms using .first()
使用此代码:
$(document).ready (function() {
var i, time = +new Date;
for ( i = 0; i < 100000; ++i ) {
$('li:first');
}
console.log ( (+new Date) - time );
time = +new Date;
for ( i = 0; i < 100000; ++i ) {
$ $('li').first();
}
console.log ( (+new Date) - time );
});
答案 2 :(得分:0)
我不完全确定,但我的猜测是内部它会起作用,所以性能差别不大。但我可能完全错了。