Как уже упоминалось в redsquare, алгоритм выбора изменился в более поздних версиях jQuery (частично из-за поддержки getElementsByClassName). Кроме того, я протестировал это с самой последней версией jQuery на сегодняшний день (v1.6), а также добавил тест для document.getElementsByClassName для сравнения (работает по крайней мере в Firefox 4 и Chrome).
Результаты в Firefox 4 были:
// With 100 non-form elements:
$('.myForm') : 366ms
$('form.myForm') : 766ms
document.getElementsByClassName('myForm') : 11ms
// Without any other elements:
$('.myForm') : 365ms
$('form.myForm') : 583ms
document.getElementsByClassName('myForm') : 11ms
Принятый ответ устарел (и все еще находится в поиске чего-то вроде «эффективного способа поиска элементов в jquery») и может вводить людей в заблуждение, поэтому я почувствовал, что должен написать это.
Кроме того, обратите внимание на разницу во времени между функциями jQuery и родным селектором браузера. В jQuery 1.2.6 $('.myForm')
был более чем в 300 раз медленнее, чем getElementsByClassName
, в то время как в jQuery 1.6 он был только примерно в 20 раз медленнее, но все еще быстрее чем $('form.myForm')
(вопреки устаревшему ответу).
Примечание: Результаты были получены с Firefox 4 (аналогичные результаты с Chrome). В Opera 10 запросы с именем тега выполняются лишь немного быстрее, но Opera также поддерживает гораздо более быстрый родной getElementsByClassName
.
Код теста: http://jsbin.com/ijeku5