DOM ノードまたは全体をwindow
JSON にシリアル化したいと考えています。
例えば:
>> serialize(document)
-> {
"URL": "http://stackoverflow.com/posts/2303713",
"body": {
"aLink": "",
"attributes": [
"getNamedItem": "function getNamedItem() { [native code] }",
...
],
...
"ownerDocument": "#" // recursive link here
},
...
}
JSON.文字列化()
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 リファレンス
`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。
ベストアンサー1
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" ]
]
まだ使用していませんが、任意の Web ページを取得して mustache.js を使用して再テンプレート化するプロジェクトで使用することを考えています。