我有一个由document.getElementById
检索的outer
元素(我不能更改此部分,因为outer
变量是由其他代码传入的(。如何获取其具有类inner
的直接子元素?我已经尝试过outer.querySelectorAll(".inner")
,它将获得所有.inner
元素(见下面的演示(。我只想要直接子项,并且有.inner
。我也试过outer.querySelectorAll("> .inner")
,但它不起作用。我该怎么做?
var outer = document.getElementById("outer");
var all = outer.querySelectorAll(".inner");
all.forEach(function(e){
e.style.border = "1px solid red";
});
<div id="outer">
<div class="inner">inner</div>
<div id="test">
<div class="inner">inner2</div>
</div>
</div>
如果outer
已经在变量中,则可以在查询字符串的开头使用:scope
和querySelectorAll
来"选择"调用querySelectorAll
的元素:
var outer = document.getElementById("outer");
outer.querySelectorAll(":scope > .inner").forEach((e) => {
e.style.border = "1px solid red";
});
<div id="outer">
<div class="inner">inner</div>
<div id="test">
<div class="inner">inner2</div>
</div>
</div>
如果不必在变量中已经有outer
,那么使用普通查询字符串#outer > .inner
:会更容易
document.querySelectorAll("#outer > .inner").forEach((e) => {
e.style.border = "1px solid red";
});
<div id="outer">
<div class="inner">inner</div>
<div id="test">
<div class="inner">inner2</div>
</div>
</div>
与其在所有子元素上迭代,另一种方法是在outer
上切换一个类,同时具有一个CSS规则,该规则适用于outer
的直接子元素,而outer
具有该类:
document.querySelector('#outer').classList.add('red');
#outer.red > .inner {
border: 1px solid red;
}
<div id="outer">
<div class="inner">inner</div>
<div id="test">
<div class="inner">inner2</div>
</div>
</div>