循環参照がある場合でも、DOM ノードを JSON にシリアル化するにはどうすればよいでしょうか? 質問する

循環参照がある場合でも、DOM ノードを JSON にシリアル化するにはどうすればよいでしょうか? 質問する

DOM ノードまたは全体をwindowJSON にシリアル化したいと考えています。

例えば:

 >> 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

windowDOM ノードにはこれらが多数あります。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 を使用して再テンプレート化するプロジェクトで使用することを考えています。

おすすめ記事