2

为什么将 el.querySelectorAll 与以“>”开头的选择器一起使用是非法的?什么是简单的替代解决方案?

var el = document.createElement('div');

el.querySelector('> div');

上面的代码将产生一个 DOM 异常 12。解决方案必须避免使用 jquery,它确实支持这一点而不会出错。可以提供 Zepto 解决方案,因为 Zepto 不支持此功能。

When the selector does not start with '>' it is valid:

el.querySelectorAll('div > div');
4

4 回答 4

6

document.querySelectorAll需要一个包含一个或多个用逗号分隔的 CSS 选择器的字符串。

'> div'不是有效的 CSS 选择器。

>是一个子组合子。子组合子描述了两个元素之间的童年关系。

'> div'只有一个元素。 ' div >'也行不通。

有关更多信息,请参阅

于 2013-07-30T21:24:47.063 回答
0

不知何故,我有一种感觉,OP只是在寻找

el.querySelector('body > div');
于 2014-09-29T05:04:08.657 回答
0
element = baseElement.querySelector(selectors)

selectors需要遵循标准的 css 语法。因此,即使querySelector是元素的方法,selectors参数也必须形成有效的 css 选择器;也就是说,您可以在样式表中使用它。

MDN 参考

于 2013-07-30T21:34:24.477 回答
-1

作为使用 Zepto 的解决方案:

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

如果您只想要所有直接后代节点而不是“div”后代,那么这种方法可能无济于事,因为使用 .find('*') 会提供更多的直接后代。

如另一个答案中所述,使用“>”的选择器需要在其前面有一个选择器表达式,并在其后有一个选择器表达式(即“div > div”)。

于 2013-07-30T21:51:31.567 回答