说我有一个HTML的结构类似
<div id="a">
<div id="b">
<div id="c"></div>
</div>
</div>
要为“A”使用querySelectorAll我可以做这样的事情的孩子做一个查询
//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遍历。 目前,我增加了临时ID为根格,但似乎像一个丑陋的黑客...
没有,没有办法(还)引用一些元素的所有孩子的不使用该元素的引用。 因为>
是一个子组合子 ,它代表一个父和子元件之间的关系,一个简单的选择器 (父)是必要的(在你例如丢失)。
在一个评论, BoltClock说 ,该选择器API级别2规范定义了一个方法findAll
名称可以改变 “,其接受作为参数什么可能会被称为相对选择器(选择器可以与一个组合子开始,而不是化合物选择器) “。
当此实现,可以使用如下:
a_div.findAll('> div');
document.querySelector('#a').querySelectorAll(':scope > div')
我不知道浏览器的支持,我却用它在Chrome和Chrome移动打包应用程序,它工作正常。
我想我一定是误解了你的问题,但是这是我怎么解释呢..
var a = document.getElementById('a')
var results = a.querySelectorAll('div');
结果现在将持有的所有孩子的div。
文章来源: When using querySelectorAll, is there a way to reference the immediate children of the context node, without using IDs?