2013-07-30 4 views
2

Почему запрещено использовать el.querySelectorAll с селектором, который начинается с '>'? Какое простое альтернативное решение?Почему это выражение незаконно в querySelectorAll

Этот код, приведенный выше, приведет к возникновению исключения DOM 12. Решение должно избегать использования jquery, который поддерживает это без ошибок. Решения Zepto могут быть предоставлены, поскольку это не поддерживается в Zepto.

Когда селектор не начинается с «>» действительно:

el.querySelectorAll('div > div'); 
+0

Использование '' .children' или .childNodes' – Ian

+0

Вы просите прямой потомок селектора на левой стороне, так что «х> y "имеет смысл, а"> y "- нет. – lossleader

+0

@ lossleader Дело в том, что OP путают, потому что jQuery ** поддерживает ** этот селектор, потому что он делает больше, чем просто передает его запросу 'querySelector' - он анализирует его и определяет путь, который ему нужно предпринять для его работы – Ian

ответ

6

document.querySelectorAll ожидает строку, содержащую один или несколько CSS селекторов, разделенных запятыми.

'> div' не действительный селектор css.

> Детский комбинатор. Детский комбинатор описывает отношения детства между двумя элементами.

'> div' имеет только один элемент. ' div >' тоже не работает.

Для получения дополнительной информации см

0
element = baseElement.querySelector(selectors) 

selectors потребности следовать стандартный синтаксис CSS. Таким образом, хотя querySelector является методом элемента, аргумент selectors должен формировать действительный css-селектор; то есть тот, который вы можете использовать в таблице стилей.

MDN reference

+0

хорошо сказано, спасибо. –

-1

В растворе с использованием зепто:

$(el.childNodes).find('div') 

Если вы просто хотите, чтобы все прямые узлы-потомки, хотя и не «ДИВ» потомок, то этот подход, вероятно, не поможет, так как с помощью .find ('*') предоставит больше прямых потомков.

Как описано в другом ответе, селектор, использующий '>', должен иметь перед ним селекторное выражение, а следующее за ним (т.е. div> div).

+0

Что именно делает метод Zecto '.find()' в этом случае? Разве это отличается от '.find()' jQuery? – BoltClock

+0

Это не отвечает на ваш вопрос –

+0

@ Винсент Макнабб: Ну, это так - частично - «Решения Zepto могут быть предоставлены, поскольку это не поддерживается в Zepto». Не отвечает, почему. – BoltClock

0

Как-то у меня есть ощущение, что OP просто ищет

el.querySelector('body > div'); 

 Смежные вопросы

  • Нет связанных вопросов^_^