Я создаю простой скрипт, который проходит через 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: [],
}
]
}
]
}
Любая помощь будет принята с благодарностью!