I search for answers in SO to mark as duplicate. And to my dismay, I couldn't find an answer which will solve your problem.
But the silver lining is, it made me write my own function.
const $List = document.getElementById('list')
const processNode = node => {
if (node.children.length) {
const children = Array.from(node.children).map(child => {
return processNode(child)
})
return {
tag: node.localName,
id: node.id,
children
}
} else {
return {
tag: node.localName,
id: node.id,
content: node.innerText
}
}
}
const vList = processNode($List);
console.log(vList)
<ul id="list">
<li>One</li>
<li>Two</li>
<li>Three</li>
<ol>
<li>Four</li>
<li>Five</li>
<li>Six</li>
</ol>
</ul>