#javascript #jquery #jquery-selectors #css-selectors #pseudo-class
#javascript #jquery #jquery-селекторы #css-селекторы #псевдокласс
Вопрос:
:last-of-type (начиная с версии v1.9) vs .last() (начиная с версии v1.4): Любой метод работает, но кто-нибудь может сказать мне, какой метод лучше, основанный на эффективности?
Пример:
$(".item").last();
$(".item:last-of-type");
«.last()» существует дольше (начиная с версии v1.4).
Есть ли в jQuery встроенный «:last-of-type» или он просто использует CSS и использует возможности браузера? Кто-нибудь может это подтвердить?
Мне кажется, что «:last-of-type» было бы лучше, когда применимо, если это так.
Комментарии:
1. Почему бы не запустить несколько тестов jsperf?
2. В общем, селекторы jQuery будут использовать собственные селекторы, когда это возможно.
3. Селекторы выполняют два разных выбора, нет?
4. Они даже отдаленно не выполняют одно и то же,
last()
просто получают последний элемент в коллекции,:last-of-type
запрашивая DOM и находя все элементы, которые являются последними по своему типу в этом родительском элементе, то есть среди братьев и сестер с одинаковым именем тега5. Я понимаю разницу, и я не говорил, что они делают точно то же самое. Я пытался выяснить, какой из них мне следует использовать для повышения эффективности. Вы правы в том, что касается сравнения. Может быть, «:last» ( ссылка ) вместо «:last-of-type» было бы лучшим примером?
Ответ №1:
.last()
быстрее.
Обратите внимание, селекторы выполняют разные выборки
селектор последнего по типу
Описание: Выбирает все элементы, которые являются последними среди аналогов с одинаковым именем элемента.
.last()
Описание: Сократите набор сопоставляемых элементов до последнего в наборе.
console.time("lastOfType");
$(".item:last-of-type");
console.timeEnd("lastOfType");
console.time("last");
$(".item").last();
console.timeEnd("last");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
Комментарии:
1. Я понимаю различия. Спасибо, что указали на это. Знаете ли вы, почему «last()» более эффективен?
2.
.last()
выбирает только последний элемент селектора или коллекции.:last-of-type
можно выбрать несколько элементов.3. Я попробовал
$(".item:last")
vs$(".item").last()
и все равно обнаружил, что это работает еще медленнее. Я все еще на самом деле не понимаю, почему это было бы медленнее… :-/4. @JoePC проверил не все селекторы jQuery
:
; не уверен, что им обычно требуется больше времени для возврата результата, чем одиночному селектору, привязанному к функции фильтрации. Внутренне jQuery должен проанализировать:pseudo
строку селектора перед выбором элемента изdocument
. Совпадают ли описания.last()
и:last
в документации jQuery?