<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DOM2JSON</title>
</head>
<body>
<div class="box">
<p class="p">hello world</p>
<div class="name">
<span class="name">DOM2JSON</span>
<span class="age">100</span>
</div>
</div>
<script>
let root = document.querySelector(".box")
let dom2tree = (root)=>{
if(!root){
return
}
let obj = {
"tagName":`${root.tagName.toLowerCase()}`,
"attrs":"",
"children":[]
}
for(let key of root.attributes){
obj.attrs += `${key.name}`+":"+`${key.value}`+","
}
obj.attrs = obj.attrs.slice(0,obj.attrs.length-1)
if(root.children&&root.children.length){
const children = root.children
Array.from(children).forEach(child=>{
obj.children.push(dom2tree(child))
})
}
return obj
}
let tree2str = (obj)=>{
if(!obj){
return
}
str = str + "{"+"tagName" + ":" + obj.tagName
if(obj.attrs){
str = str + "," + "attrs" + ":{" +obj.attrs + "}"
}
if(obj.children&&obj.children.length){
str = str + ","+"children" + ":{"
obj.children.forEach(child=>{
tree2str(child,str)
})
str = str + "}"
}else{
str = str + "}"
}
}
let str = ""
console.log(dom2tree(root))
tree2str(dom2tree(root))
console.log(str)
</script>
</body>
</html>