1

在 Prototype.js 1.6.x 中尝试并执行

Object.toJSON([{"nodeType":1}])

它应该产生

'[{"nodeType":1}]'

作为输出字符串。但是它产生'[]'。它似乎跳过了 nodeType==1 的对象。这与它们是 DOM 元素有关。是否有解决方法来获得正确的输出?

jsFiddle:http: //jsfiddle.net/xPVnr/

编辑:

查看源代码,如果 isElement(obj) 为真,则 toJSON 仅返回,如果 obj.nodeType == 1 则为真 :(

4

1 回答 1

0

使用 JSON.stringify 但进行以下调整以获得正确的输出(如果是数组):

var _json_stringify = JSON.stringify;
JSON.stringify = function(value) {
    var _array_tojson = Array.prototype.toJSON;
    delete Array.prototype.toJSON;
    var r=_json_stringify(value);
    Array.prototype.toJSON = _array_tojson;
    return r;
};

这解决了 Array toJSON 与 JSON.stringify 的不兼容问题,并且还保留了 toJSON 功能,因为其他 Prototype 库可能依赖于它。

于 2013-01-02T05:12:46.493 回答