Javascript 当使用querySelectorAll时,是否有一种方法可以引用上下文节点的直接子节点而不使用ID?

Javascript 当使用querySelectorAll时,是否有一种方法可以引用上下文节点的直接子节点而不使用ID?,javascript,css-selectors,selectors-api,Javascript,Css Selectors,Selectors Api,假设我有一个HTML结构,比如 <div id="a"> <div id="b"> <div id="c"></div> </div> </div> var a = document.getElementById('a') var results = a.querySelectorAll('div'); 我的问题是:是否可以在没有ID的情况下直接引用节点来执行此操作?我试过了 var a_div = do

假设我有一个HTML结构,比如

<div id="a">
  <div id="b">
    <div id="c"></div>
  </div>
</div>
var a = document.getElementById('a')
var results = a.querySelectorAll('div');
我的问题是:是否可以在没有ID的情况下直接引用节点来执行此操作?我试过了

var a_div = document.getElementById('a')
a_div.querySelectorAll('> div') //<-- error here
var a = document.getElementById('a')
var results = a.querySelectorAll('div');
var a_div=document.getElementById('a'))
a_div.queryselectoral('>div')/不,没有一种方法(目前)可以引用某个元素的所有子元素而不使用对该元素的引用。因为
是a,它表示父元素和子元素之间的关系,所以a(父元素)是必需的(在您的示例中缺少)

var a = document.getElementById('a')
var results = a.querySelectorAll('div');
在注释中,定义方法名称可能会更改“它接受可能被称为相对选择器(可以以组合符而不是复合选择器开头的选择器)的参数”。
当实现此功能时,可按如下方式使用:

a_div.findAll('> div');
var a = document.getElementById('a')
var results = a.querySelectorAll('div');

我想我一定是误解了你的问题,但我就是这样解释的

var a = document.getElementById('a')
var results = a.querySelectorAll('div');
结果将保存您的所有子div

var a = document.getElementById('a')
var results = a.querySelectorAll('div');
document.querySelector('#a').querySelectorAll(':scope > div')

我不确定是否支持浏览器,但我在chrome和chrome移动打包应用程序上使用了它,它工作得很好。

results
不仅包含子div,还包含所有子div。不过我想从结果中排除“c”div。“#a>div”选择器只返回“b”div。但通常的解决方法是什么?将(临时)id添加到根元素是唯一的方法吗?@missingno是。另一种方法是循环遍历所有
.childNodes
,并使用
childNodes[i].nodeName.toUpperCase()=='div'
。更严格地说,“因为
是一个组合符”,您不能使用
queryselectoral()
来测试子节点是否是一个div。在不久的将来,您将能够使用
findAll()
实现这一点,它接受一个可能被称为相对选择器的参数(一个可以从组合符而不是复合选择器开始的选择器)。请参阅规范。@BoltClock谢谢您提供的信息,我已经修改了我的答案。另请参阅::Chrome、Firefox 32+、Safari 7,不是Opera,不是IE。
var a = document.getElementById('a')
var results = a.querySelectorAll('div');