哔哔one
我只是编写了此函数来实现您想要的功能,请尝试一下,让我知道它是否无法正确运行:// Test with an element.var initElement = document.getElementsByTagName("html")[0];var json = mapDOM(initElement, true);console.log(json);// Test with a string.initElement = "
textText2
";json = mapDOM(initElement, true);console.log(json);function mapDOM(element, json) { var treeObject = {}; // If string convert to document Node if (typeof element === "string") { if (window.DOMParser) { parser = new DOMParser(); docNode = parser.parseFromString(element,"text/xml"); } else { // Microsoft strikes again docNode = new ActiveXObject("Microsoft.XMLDOM"); docNode.async = false; docNode.loadXML(element); } element = docNode.firstChild; } //Recursively loop through DOM elements and assign properties to object function treeHTML(element, object) { object["type"] = element.nodeName; var nodeList = element.childNodes; if (nodeList != null) { if (nodeList.length) { object["content"] = []; for (var i = 0; i < nodeList.length; i++) { if (nodeList[i].nodeType == 3) { object["content"].push(nodeList[i].nodeValue); } else { object["content"].push({}); treeHTML(nodeList[i], object["content"][object["content"].length -1]); } } } } if (element.attributes != null) { if (element.attributes.length) { object["attributes"] = {}; for (var i = 0; i < element.attributes.length; i++) { object["attributes"][element.attributes[i].nodeName] = element.attributes[i].nodeValue; } } } } treeHTML(element, treeObject); return (json) ? JSON.stringify(treeObject) : treeObject;}工作示例:http : //jsfiddle.net/JUSsf/(在chrome中测试,我不能保证完全支持浏览器-您必须对此进行测试)。它将创建一个对象,该对象包含您请求格式的HTML页面的树状结构,然后使用JSON.stringify()大多数现代浏览器(IE8 +,Firefox 3+等)中包含的结构; 如果您需要支持较旧的浏览器,则可以包含json2.js。它可以使用a DOM element或string包含有效XHTML的参数作为参数(我相信,我不确定DOMParser()在某些情况下,will 是否会因设置为true而窒息,"text/xml"或者只是不提供错误处理。不幸的是"text/html",浏览器支持不佳)。您可以通过传递一个不同的值来轻松更改此函数的范围element。无论您传递什么值,都将成为JSON映射的根。请享用