【发布时间】:2011-01-19 05:02:24
【问题描述】:
我想将 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 不序列化函数,所以这不是我要找的。p>
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。
【问题讨论】:
-
我正在尝试为不同的浏览器制作 DOM 兼容性表。
-
您希望如何对 DOM 节点进行序列化?你想从 DOM 节点获得什么信息?
-
Gumbo,我刚刚添加了示例。现在清楚了吗?
-
FWIW,我仍然不明白序列化为 JSON 是如何帮助您以“通用方式”测试兼容性的。
-
我需要区分不同浏览器的整个
window对象。如果不将window序列化为 JSON 之类的东西,我不知道该怎么做。
标签: javascript json dom serialization circular-reference