html - 使用高级逻辑查询 Html 层次结构
问题描述
给定html:
<div data-root="A">
<div>Ignored</div>
<div data-child="B">
<div data-child="C" data-root="E">
<div data-child="F"></div>
<div data-child="G">
<div data-root="Q">
<div data-child="K"></div>
</div>
</div>
</div>
</div>
</div>
对于任何给定的元素(根),我想查询所有具有data-child
填充属性且不属于另一个data-root
指定元素的子元素。
样本结果:
- 数据根 A:数据子项:B、C
- 数据根 E:数据子项:F、G、Q
- 数据根 Q:数据子代:K
我通过调用解决它root.querySelectorAll("[data-child]")
,然后通过跟踪它到父元素来单独检查每个元素,同时检查是否有data-root
指定的元素。它可以工作,但是代码对于它正在做的事情有点尴尬。理想情况下,我正在寻找一种无代码的声明性解决方案,任何人都可以为我的问题想出它吗?
解决方案
唯一可用的基于选择器的解决方案,形式为
root.querySelectorAll("[data-child]:not(:scope [data-root] *)")
使用尚未被所有浏览器支持的选择器级别 4 功能,因此可能无法满足您的需求。选择器级别 3 中没有这样的解决方案。
推荐阅读
- ethereum - 我必须使用什么合约地址从我的 dapp 转移我的多边形网络代币
- javascript - 在添加 dotenv 文件时出现错误 Error : [TypeError: Network request failed]
- html - 如何在 bootsrap 5 中向导航栏添加文本颜色?
- react-native - 虽然我没有使用 useEffect 钩子
- android - 任务进入后台或进入前台时回调?
- php - 尝试将图像路径上传到数据库时出现此错误“从空值创建默认对象”
- python - etcd 响应在 Python 3.9 应用程序中不包含集群 ID
- sql - 对 SQL 进行排序时,如何添加额外的规则与上一行?
- python - 为什么我的代码不能对列表中负数的值求和?
- c++ - 如何在 Visual Studio 中对 C 项目进行单元测试和模拟