Tom*_*ica 2 javascript queryselector
假设您获得了一个节点node,并且您必须提供由选择器给出的所有直接子节点Direct。直接子代的选择器是:
childParent > directChild
Run Code Online (Sandbox Code Playgroud)
但是,以下失败并在控制台中出现错误:
document.body.querySelectorAll(">div")
SyntaxError: '>div' is not a valid selector
Run Code Online (Sandbox Code Playgroud)
我有一个函数需要在选择直接子节点上执行某些操作,但我不确定如何处理这个问题。当然,除了使用for循环并用我自己的代码分析子级,完全放弃选择器。
下面的代码不起作用。是否可以对其进行更改以实现预期目的?
function doWithDirectChildren(parentNode) {
// does not work, the selector is invalid
const children = parentNode.querySelector(">.shouldBeAffected");
for(const direct of children) {
// do something with the direct child
}
}
Run Code Online (Sandbox Code Playgroud)
我要求的是解决方案,而不是解决方法。
Bes*_*rks 10
执行此操作的正确方法是使用:scope伪类。
根据MDN 的文档:
当从 DOM API(例如 querySelector()、querySelectorAll()、matches() 或 Element.closest())使用时,:scope 匹配调用该方法的元素。
例如:
let parent = document.querySelector('#parent');
let scoped = parent.querySelectorAll(':scope > span');
Array.from(scoped).forEach(s => {
s.classList.add('selected');
});Run Code Online (Sandbox Code Playgroud)
.selected {
background: yellow;
}Run Code Online (Sandbox Code Playgroud)
<div id="parent">
<span> Select Me </span> <br>
<span> Me Too </span>
</div>
<span> Not Selected </span>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |