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

Наиболее подходящий способ получить это: $($ ( ". Answer" ) [0])

Предположим, что я хочу получить первый элемент среди всех элементов класса ".answer"

$($(".answer")[0])

Я могу сделать выше, но какой лучший баланс между элегантностью и скоростью?

* изменил вопрос, чтобы отразить текущую дискуссию

4b9b3361

Ответ 1

В функциональности (хотя и не в скорости) все эквивалентны:

Что лучше?
Было высказано предположение , что селекторные версии должны быть быстрее, чем версии метода (и логика имеет смысл), но я еще не нашел надежного кросс-браузера, multi -документ, который доказывает, что это правда.

И в некоторых случаях вы не можете использовать селектор, так как у вас есть объект jQuery, полученный в результате цепочечных результатов, и он должен позже pare it down.

Изменить. Основываясь на отличной информации из нижеприведенных тестов @yc, следуют текущие (2011-февраль-4) результаты тестов, суммированные и сравниваемые с базовым уровнем .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%
 Safari 5   100%     93%      349%    352%       467%
 Opera 11   100%    103%      373%    374%       465%
     IE 8   100%    101%     1130%   1246%      1767%
 iPhone 4   100%     95%      269%    316%       403%
=====================================================
 Weighted   100%     92%      286%    295%       405%
    Major   100%     95%      258%    280%       366%
  • Строка Взвешенная показывает производительность, взвешенную по количеству тестов на браузер; популярные браузеры (среди этих тестов) считаются более сильными.
  • Строка Major показывает то же самое, включая не бета-версии основных браузеров на рабочем столе.

Вкратце: гипотеза (в настоящее время) неверна. Методы значительно быстрее, чем селектор Sizzle, и почти без исключения код OP $($('.answer')[0]) является самым быстрым из всех!

Ответ 2

Я не могу говорить об аспекте элегантности, но здесь здесь очень важны аспект производительности.

Похоже, из набора тестов JavaScript, что ваш оригинальный метод на самом деле является наиболее эффективным, и вопреки гипотезе что принятый ответ, связанный с селекторами Sizzle без CSS, как правило, намного менее эффективен, чем селекторы методов. Там причина для этого. $('.answer') может использовать родной браузер getElementsByClass() без необходимости вручную перемещать результаты. Селектор :first усложняет это. В этом случае использование селекторов sizzle, похоже, замедляет выбор в 4-5 раз.

Я бы сказал, что с jQuery производительность должна превосходить элегантность, и все доказательства (каждый браузер, который я тестировал до сих пор!), по-видимому, указывают на то, что OP inelegant solution является самым быстрым из-за справедливой суммы.

Вот результаты браузеров с наибольшим количеством тестовых прогонов:

enter image description here

(Числа - "операции в секунду", поэтому более высокие числа быстрее, более низкие числа медленнее.)

Ответ 3

Используйте селектор :first или .first фильтр:

$(".answer:first");

или

$(".answer").first();