Element.querySelector()
сначала применяет CSS селекторы, переданные методу .querySelector()
, для всего документа и , а не базовый элемент , на котором был вызван .querySelector()
. Это делается для создания начального набора потенциальных элементов.
После создания начального набора потенциальных элементов список потенциальных элементов затем фильтруется, чтобы сохранить только те элементы, которые являются потомками базового элемента. Наконец, возвращается первый элемент из этого отфильтрованного списка.
В вашем примере кода сначала выполняется поиск элементов, соответствующих div span
, во всем документе. Поскольку во всем документе есть только один элемент, который соответствует селектору div span
, начальный набор потенциальных элементов содержит только один элемент span
. После этого этот элемент span
проверяется, является ли он потомком baseElement
. Поскольку в данном случае он является потомком baseElement
, он возвращается.
То, что я объяснил выше, записано под заголовком «Возвращаемое значение» в MDN - Element.querySelector ()
При сопоставлении учитывается вся иерархия элементов, включая те вне набора элементов, включая baseElement и его потомки; другими словами, селекторы сначала применяются ко всему документу, а не к базовому элементу, чтобы сгенерировать начальный список потенциальных элементов. Затем полученные элементы проверяются на предмет того, являются ли они потомками baseElement. Первое совпадение этих оставшихся элементов возвращается методом querySelector ().