思路:将dom节点转换为json数据,其实是从上到下转换,首先获取该节点,然后分别使用tagName、attributes、childNodes获取元素的标签名、元素的属性集合(name、value)、元素的子节点 集合,然后再分别使用nodeType、textContent判断元素的节点类型、文本内容。
<body>
<div id="jsContainer">
<ul class="js-test" id="jsParent">
<li data-index="0">1</li>
<li data-index="1">2</li>
</ul>
<span style="font-weight: bold;">3</span>
4
</div>
<script type="text/javascript">
function dom2json() {
const jsContainer=document.getElementById('jsContainer')
var res=createObj(jsContainer)
console.log(res)
return res
}
function createObj(element)
{
//创建空对象
const obj={}
//获取标签名称
obj.tag=element.tagName.toLowerCase()
//获取属性
var attribute={}
Array.from(element.attributes).forEach(attr=>{
var name = attr.name
var value = attr.value
attribute[name]=value
})
obj.attributes=attribute
//获取子节点
var children=[]
Array.from(element.childNodes).forEach(node=>{
if(node.nodeType===1)
children.push(createObj(node))
else if(node.nodeType===3)
{
var content=node.textContent.trim()
if(content!=="")
{
children.push({tag:'text',content:content})
}
}
})
obj.children=children
return obj
}
dom2json()
</script>
</body>
总结:tagName(标签名称)代表DOM节点的标签名称;attributes(属性)代表DOM节点的属性集合;nodeType(节点类型)表示DOM节点的类型,1代表元素节点,3代表文本节点;textContent(文本内容)代表DOM节点的文本内容,当节点类型是文本节点(nodeType为3)时,textContent属性表示该文本节点包含的文本内容。
注意:和JS40是互逆操作!!!



京公网安备 11010502036488号