题解 | #dom节点转成json数据#
dom节点转成json数据
https://www.nowcoder.com/practice/0340a0c6d11d4aadba0aef86e6ae723f
最近刚学TypeScript,贴一个TypeScript和一个JavaScript,请大佬们多多指正
function dom2json() {
let test = document.getElementById("jsContainer");
return dfs(test!);
}
type TextType = {
tag: "text",
content: string
};
type MyType = {
tag: string,
attributes:Record<string, string>,
children: (MyType|TextType)[]
}
function dfs(node: HTMLElement) {
if(node.nodeType === Node.ELEMENT_NODE) {
let attributes: Record<string, string> = {};
for(let i = 0; i < node.attributes.length; ++i) {
attributes[`${node.attributes[i].nodeName}`] = `${node.attributes[i].nodeValue}`
}
let child = Array.from(node.childNodes).filter((v)=> {
return v.nodeType === Node.ELEMENT_NODE || (v.nodeType === Node.TEXT_NODE && v.nodeValue!.trim() !== '');
})
let ret:MyType = {
"tag": node.nodeName.toLowerCase(),
attributes,
"children": child.map((v) => {
return dfs(v as HTMLElement);
})
};
return ret;
}
else {
let ret:TextType = {
"tag": "text",
"content": node.nodeValue!.trim()
}
return ret;
}
}
function dom2json() {
var test = document.getElementById("jsContainer");
return dfs(test);
}
function dfs(node) {
if (node.nodeType === Node.ELEMENT_NODE) {
var attributes = {};
for (var i = 0; i < node.attributes.length; ++i) {
attributes["".concat(node.attributes[i].nodeName)] = "".concat(node.attributes[i].nodeValue);
}
var child = Array.from(node.childNodes).filter(function (v) {
return v.nodeType === Node.ELEMENT_NODE || (v.nodeType === Node.TEXT_NODE && v.nodeValue.trim() !== '');
});
var ret = {
"tag": node.nodeName.toLowerCase(),
attributes: attributes,
"children": child.map(function (v) {
return dfs(v);
})
};
return ret;
}
else {
var ret = {
"tag": "text",
"content": node.nodeValue.trim()
};
return ret;
}
}
查看14道真题和解析