得到这个最合适的方法:$($(“。answer”))
假设我想获得类“.answer”中所有元素中的第一个元素,
$($(".answer")[0])
我可以做到以上,但优雅和速度之间的最佳平衡是什么?
*改变了这个问题,以反映当前的讨论
下面的function都是相同的(虽然不是速度):
-
var a0 = $($('.answer')[0]);
-
var a0 = $('.answer').first();
– 请参阅http://api.jquery.com/first/ -
var a0 = $('.answer:first');
– 见http://api.jquery.com/first-selector/ -
var a0 = $('.answer').eq(0);
– 见http://api.jquery.com/eq/ -
var a0 = $('.answer:eq(0)');
– 见http://api.jquery.com/eq-selector/
哪个最好?
据推测 ,select器版本应该比方法版本更快(而逻辑是有道理的),但是我还没有find一个可靠的跨浏览器,多文档的基准testing,certificate这是真实的。
在某些情况下,你不能使用select器,因为你有一个从链接结果产生的jQuery对象,必须稍后删除。
编辑 :根据以下@ yctesting的优秀信息,以下是当前(2011年 – 2月 – 4日)testing结果总结和比较与.answer:first
的基线.answer:first
:
:first:eq(0).first().eq(0)$($('...')[0]) Chrome 8 + 100%92%224%266%367% FF 3.6 100%100%277%270%309% FF 4.0b 100%103%537%521%643% safari5 100%93%349%352%467% 歌剧11 100%103%373%374%465% IE 8 100%101%1130%1246%1767% iPhone 4 100%95%269%316%403% ================================================== === 加权100%92%286%295%405% 主要100%95%258%280%366%
- 加权线显示按每个浏览器的testing次数加权的性能; stream行的浏览器(在这些testing中)被更强烈地计算在内。
- 主要行显示相同,只包括主要桌面浏览器的非beta版本。
总之:这个假设是(目前)是错误的。 这个方法比Sizzleselect器快得多,几乎没有例外,OP的代码$($('.answer')[0])
是其中最快的!
这可能是StackOverflow自杀与25对upvotes公认的答案,但我打算这样做,因为准确性很重要。 我不能讲优雅的一面,但这里的performance方面实际上可以造成巨大的差异。
从一组JavaScripttesting中看 ,您的原始方法实际上是最有效的方法,与假设接受的答案相关的非CSS Sizzleselect器往往比方法select器相比效率要低得多。 这是有原因的。 $('.answer')
可以使用浏览器原生的getElementsByClass()
而不必手动遍历结果。 第:first
select器使这个复杂化。 在这种情况下,使用嘶嘶声select器似乎减慢了4-5倍的select。
我认为,使用jQuery,性能应该胜过优雅,所有的证据(我已经testing过的每一个浏览器!)似乎表明,OP的不雅的解决scheme是最快的一个相当数量。
以下是testing运行最多的浏览器的结果:
(这些数字是“每秒操作”,所以数字越大越快,数字越小越慢。)
使用:first
select器或.first
filter方法:
$(".answer:first");
要么:
$(".answer").first();