Подтвердить что ты не робот

JQuery: первый против .first()

Метод .first() был добавлен в jQuery 1.4.

Селектор :first существует с 1.0.

Из документов:

:first

Псевдокласс :first эквивалентен :eq(0). Его также можно записать как :lt(1). Хотя это соответствует только одному элементу, :first-child может соответствовать более одного: один для каждого родителя.

.first()

Учитывая объект jQuery, представляющий набор элементов DOM, метод .first() создает новый объект jQuery из первого соответствующего элемента.


Кажется, что .first() - это фильтр, который возвращает другой объект jQuery, а :first - это просто селектор.

Но они оба могут использоваться для достижения того же самого.

Итак, когда следует использовать вместо другого? Представление? Приведите примеры.

4b9b3361

Ответ 1

.first() может использоваться для выбора первого элемента в коллекции jQuery.

В принципе, он избегает необходимости выполнять новый запрос или прерывать цепочку в ситуациях, когда вам нужно работать с коллекцией, а затем исключительно на первом элементе.

На самом деле одной из самых дорогостоящих операций, которые вы можете выполнить в jQuery, является запрос. Чем меньше вы делаете, тем лучше...

В качестве примера можно привести галерею изображений script, где ваше первое изображение всегда является активным по умолчанию, но вам нужно прикрепить обработчик событий на каждое изображение...

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

// Instead of
$('#gallery img').click(myFunc);
$('#gallery img:first').addClass('active');

.first() также является синтаксическим сахаром для чего-то, что существует с 1.1.2... .eq(0):

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

на самом деле, как это реализовано в самом jQuery:

first: function() {
  return this.eq( 0 );
}

Ответ 2

Если .first() и :first используются в том же контексте для получения той же информации, например:

Html:

<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
</ul>

Script:

console.log("1", $('ul li').first().text());
console.log("2", $('ul li:first').text());

.first() более эффективен

** enter image description here

Как упоминалось Эндрю Мур, .first() является эквивалентом .eq(0).
Согласно jsperf.com, .eq(0) будет лучшим, но нет большой разницы с .first().

Вы можете увидеть мой источник, здесь: http://jsperf.com/first-vs-first-vs-eq-0

Ответ 3

$('li').css('color', 'red').first().css('color', 'green'); применит фильтр после того, как коллекция уже была использована.

В большинстве случаев я бы использовал селектор :first, так как он может быть объединен с так много других хороших селекторов, все в одной развертке.

Ответ 4

Псевдо-селектор : первый и first() могут делать то же самое.

Что касается производительности, здесь представлен живой пример разницы в производительности между jQuery first():: first, eq (0) и: nth (0).

http://jsperf.com/jquery-first-vs-first-selector, пожалуйста, проверьте это!

Надеюсь, это поможет.