即使有循环引用,如何将DOM节点序列化为JSON?
我想序列化DOM节点甚至整个window
到JSON。
例如:
>> serialize(document)
-> {
"URL": "http://stackoverflow.com/posts/2303713",
"body": {
"aLink": "",
"attributes": [
"getNamedItem": "function getNamedItem() { [native code] }",
...
],
...
"ownerDocument": "#" // recursive link here
},
...
}
JSON.stringify()
JSON.stringify(window) // TypeError: Converting circular structure to JSON
问题是JSON默认不支持循环引用。
var obj = {}
obj.me = obj
JSON.stringify(obj) // TypeError: Converting circular structure to JSON
window
和DOM节点有很多。 window === window.window
与document.body.ownerDocument === document
。
另外, JSON.stringify
不会序列化函数,所以这不是我正在寻找的。
dojox.json.ref
`dojox.json.ref.toJson()` can easily serialize object with circular references:
var obj = {}
obj.me = obj
dojox.json.ref.toJson(obj); // {"me":{"$ref":"#"}}
好,不是吗?
dojox.json.ref.toJson(window) // Error: Can't serialize DOM nodes
对我来说还不够好。
为什么?
我正在尝试为不同的浏览器制作DOM兼容表。 例如,Webkit支持占位符属性和Opera不支持,IE 8支持localStorage
和IE 7不支持,依此类推。
我不想做成千上万的测试用例。 我想通用的方式来测试它们。
更新,2013年6月
我制作了一个NV / dom-dom-dom.com原型。
http://jsonml.org/将XHTML DOM元素转换为JSON的语法。 一个例子:
<ul>
<li style="color:red">First Item</li>
<li title="Some hover text." style="color:green">Second Item</li>
<li><span class="code-example-third">Third</span> Item</li>
</ul>
变
["ul",
["li", {"style": "color:red"}, "First Item"],
["li", {"title": "Some hover text.", "style": "color:green"}, "Second Item"],
["li", ["span", {"class": "code-example-third"}, "Third"], " Item" ]
]
还没有使用它,但考虑将它用于我想要使用任何网页并使用mustache.js重新模板的项目。
您可能会遍历DOM并生成纯JS对象表示,然后将其提供给DojoX序列化程序。 但是,您必须首先决定如何计划将DOM元素,它们的属性和文本节点映射到JS对象,而没有歧义。 例如,你会如何表达以下内容?
<parent attr1="val1">
Some text
<child attr2="val2"><grandchild/></child>
</parent>
喜欢这个?
{
tag: "parent",
attributes: [
{
name: "attr1",
value: "val1"
}
],
children: [
"Some text",
{
tag: "child",
attributes: [
{
name: "attr2",
value: "val2"
}
],
children: [
{ tag: "grandchild" }
]
}
]
}
我认为DojoX不会立即支持DOM序列化的一个原因正是如此:需要首先选择一个将DOM映射到JS对象的方案。 有没有可以采用的标准方案? 你的JS对象是否会简单地模仿没有任何函数的DOM树? 我认为你必须首先定义你的期望是从“序列化DOM到JSON”。
我发现这一点,当我试图将XML字符串转换为JSON时,它非常适合我。
XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(xmlString));
也许它会有所帮助。
链接地址: http://www.djcxy.com/p/27927.html上一篇: How to serialize DOM node to JSON even if there are circular references?