Разница между querySelector() и querySelectorAll()[0]

Я наткнулся на некоторый код JS, используя следующее, чтобы выбрать первый из нескольких узлов.

querySelectorAll()[0]

Разве следующее не делает то же самое?

querySelector()

Есть ли преимущество использования querySelectorAll()[0]?

2 ответа

Решение

Оба выражения вернут один и тот же результат.

Единственная разница заключается в querySelectorAll()[0] сначала найдет все элементы, соответствующие селектору, а затем проиндексирует первый элемент. В то время как querySelector() будет "короткое замыкание", как только он найдет первый элемент.

Итак, теоретически querySelector() может быть немного более эффективным, чем querySelectorAll()[0], Однако их поведение идентично.

Они оба приводят к одному и тому же, но они идут разными путями (в прямом и переносном смысле), чтобы добраться туда. В вашем примере .querySelector() правильный подход, потому что .querySelectorAll() Это приведет к увеличению производительности при сканировании всего элемента, который вызывается методом, когда ему нужно только использовать первое совпадение.

Преимущество для .querySelectorAll() заключается в том, что вы можете кэшировать ссылку на весь набор соответствующих элементов, а затем индексировать их или зацикливать их при необходимости позже. Итак, если возникла необходимость в первом подобранном элементе, но весь набор понадобится где-то еще в коде, то .querySelectorAll(<<selector>>)[0] будет иметь смысл.

Другие вопросы по тегам