假设我有一个
HTML结构
<div id="a"> <div id="b"> <div id="c"></div> </div> </div>
要使用querySelectorAll查询“a”的子项,我可以执行类似的操作
//Get "b",but not "c" document.querySelectorAll('#a > div')
我的问题是:是否可以在没有ID的情况下直接引用节点?我试过了
var a_div = document.getElementById('a') a_div.querySelectorAll('> div') //<-- error here
但我收到一个错误,告诉我我使用的选择器无效.
如果有人想知道,我的真实用例会更复杂,比如’> .foo .bar .baz’所以我宁愿避免手工DOM遍历.目前我正在为root div添加一个临时id,但这似乎是一个丑陋的黑客……
解决方法
不,没有一种方法(尚未)引用某个元素的所有子元素而不使用对该元素的引用.因为>是一个
child combinator,表示父元素和子元素之间的关系,simple selector(父元素)是必要的(在您的示例中缺少).
在评论BoltClock said中,Selectors API Level 2 specification定义方法findAll
name可以改变“作为参数接受什么可能被称为相对选择器(可以以组合器而不是复合选择器开始的选择器)”.
实现时,可以按如下方式使用:
a_div.findAll('> div');