我正在创建一个简单的脚本,它遍历 DOM 并返回一个树对象,其中包含在 DOM 中找到的元素。递归遍历本身非常简单,但我想要/需要跳过某些元素并包含其他元素。我该怎么做呢?
这是我的 HTML:
<div data-element="from-here">
<div>skip me</div>
<div>
<div data-element="awesome">awesome text</div>
<div data-element="collect-me">
awesome text
<div data-element="also-me">
other text
<div class="but-not-me">...</div>
</div>
</div>
</div>
</div>
还有我的递归遍历代码:
const root = document.querySelector('[data-element="from-here"]');
function traverse(node) {
return {
element: node.dataset.element,
children: Array.from(node.querySelectorAll(':scope > div')).map(childNode => traverse(childNode)),
};
}
traverse(root);
正如您所看到的,代码查询所有 div 元素,但我只需要带有data-element属性的元素。我不能只执行 `node.querySelectorAll(':scope > [data-element]') 因为这不会超出第一个 div。
这就是我想要的结果:
{
element: 'from-here',
children: [
{
element: 'awesome',
children: [],
},
{
element: 'collect-me',
children: [
{
element: 'also-me',
children: [],
}
]
}
]
}
任何帮助将不胜感激!
郎朗坤
鸿蒙传说
呼啦一阵风
相关分类