Я хочу сериализовать DOM node или даже целую 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 поддерживает атрибут placeholder, а Opera - нет, IE 8 поддерживает localStorage, а IE 7 - нет и т.д.
Я не хочу делать тысячи тестовых случаев. Я хочу сделать общий способ проверить их все.
Обновление, июнь 2013 г.
Я сделал прототип NV/dom-dom-dom.com.
