jQuery:第一次与.first()

Sco*_*ttE 59 performance jquery

.first()方法已在jQuery 1.4中添加.

:first自1.0选择已经存在了.

来自文档:

:first

:first伪类相当于:eq(0).它也可以写成:lt(1).虽然这只匹配一个元素,但:first-child可以匹配多个:每个父元素一个.

.first()

给定一个表示一组DOM元素的.first()jQuery对象,该方法从第一个匹配元素构造一个新的jQuery对象.


它似乎.first()是一个返回另一个jQuery对象的过滤器,而:first它只是一个选择器.

但是,它们都可以用来完成同样的事情.

那么,何时应该使用一个而不是另一个?性能?请提供示例.

Sim*_*old 60

如果.first():first相同的上下文中使用以获取相同的信息,例如:

Html:

<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

脚本:

console.log("1", $('ul li').first().text());
console.log("2", $('ul li:first').text());
Run Code Online (Sandbox Code Playgroud)

.first() 更高效

** 在此输入图像描述

正如Andrew Moore所提到的,.first()相当于.eq(0).
根据jsperf.com,.eq(0)将是最好的,但没有太大的区别.first().

您可以在此处查看我的来源:http://jsperf.com/first-vs-first-vs-eq-0

  • 那真是怪了.我会认为`:first`更快,因为JS在找到第一个元素后可以停止搜索DOM,而`.first()`需要让整个集合输出第一个元素. (11认同)
  • +1实验.知道如何解释你的发现吗? (4认同)
  • +1实际上_directly_回答问题,提供背景,并显示结果证明(带链接!) (4认同)
  • 根据该测试的新版本(http://jsperf.com/jquery-first-vs-first2/11),最快的是`$('ul li')[0]`.但是,我注意到这似乎没有返回一个jQuery对象,而`.first()`和`:first`就是这样.因此,性能最好的是`.first()`. (3认同)

And*_*ore 43

.first() 可用于选择jQuery集合中的第一个元素.

基本上,它避免了在需要处理集合然后专门处理第一个元素时必须执行新查询或中断链.

实际上,您可以在jQuery中执行的最昂贵的操作之一是查询.你做的越少,它就越好......

我现在能想到的一个例子是图像库脚本,其中您的第一个图像始终是默认的活动图像,但您需要在每个图像上附加一个事件处理程序...

$('#gallery img').click(myFunc).first().addClass('active');

// Instead of
$('#gallery img').click(myFunc);
$('#gallery img:first').addClass('active');
Run Code Online (Sandbox Code Playgroud)

.first()也是自1.1.2以来存在的东西的语法糖... .eq(0):

$('#gallery img').click(myFunc).eq(0).addClass('active');
Run Code Online (Sandbox Code Playgroud)

事实上,这就是jQuery本身的实现方式:

first: function() {
  return this.eq( 0 );
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您只需要第一个元素,并且没有(或需要)查询完整集,您能否扩展您的答案?你会使用`$('#gallery img').first().addClass('active')`或者你更喜欢`$('#gallery img:first').addClass('active')`? (9认同)
  • 我不知道.eq(0).谢谢. (6认同)