我遇到了下一个麻烦,试图将JSON.stringify与“replacer”一起使用。
var scriptTag = document.createElement('script');
scriptTag.type = 'text/javascript';
scriptTag.src = 'https://wicked-good-xpath.googlecode.com/files/wgxpath.install.js';
document.body.appendChild(scriptTag);
function censor(censor) {
var i = 0;
return function(key, value) {
console.log(i,typeof(censor),'=====',typeof(value), value);
if(i !== 0 && /*typeof(censor) === 'object' && typeof(value) == 'object' && */ censor == value)
return null;
console.log(i,typeof(censor),'=====',typeof(value), value);
if(i >= 29) // seems to be a harded maximum of 30 serialized objects?
return null;
console.log(i,typeof(censor),'=====',typeof(value), value);
++i; // so we know we aren't using the original object anymore
return value;
};
}
XPathResult = document.evaluate('**<SOME XPATH HERE>**', document, null, XPathResult.ANY_TYPE, null);
var actualNode = XPathResult.iterateNext();
var result = [];
while (actualNode) {
result.push(jQuery.makeArray(actualNode));
actualNode = XPathResult.iterateNext();
}
console.log(result);
console.log("Result: ", JSON.stringify(result, censor(result)));
问题是在DevTools和Firebug中'JSON.stringify(结果,censor(结果)));'是不同的 -
Chrome输出:
console output of **30** objects
Result: [[{"width":"","vAlign":"","scope":"col","rowSpan":1,"noWrap":false,"height":"","headers":"","colSpan":1,"chOff":"","ch":"","bgColor":"","axis":"","align":"","abbr":"","cellIndex":4,"spellcheck":true,"isContentEditable":false,"contentEditable":"inherit","children":{"length":0},"outerText":"PUBLICATION DATE","outerHTML":"<th scope=\"col\" class=\"sortDesc byPublicationDate\" style=\"cursor: pointer;\">PUBLICATION DATE</th>","innerText":"PUBLICATION DATE","innerHTML":"PUBLICATION DATE","accessKey":"","hidden":false,"webkitdropzone":null,"draggable":null,"tabIndex":null,"dir":null,"translate":null,"lang":null,"title":null,"id":null,"webkitShadowRoot":null,"webkitPseudo":null,"childElementCount":null,"nextElementSibling":null,"previousElementSibling":null,"lastElementChild":null,"firstElementChild":null,"dataset":null,"classList":null,"className":null,"scrollHeight":null,"scrollWidth":null,"scrollTop":null,"scrollLeft":null,"clientHeight":null,"clientWidth":null,"clientTop":null,"clientLeft":null,"offsetParent":null,"offsetHeight":null,"offsetWidth":null,"offsetTop":null,"offsetLeft":null,"style":null,"tagName":null,"parentElement":null,"textContent":null,"baseURI":null,"localName":null,"prefix":null,"namespaceURI":null,"ownerDocument":null,"attributes":null,"nextSibling":null,"previousSibling":null,"lastChild":null,"firstChild":null,"childNodes":null,"parentNode":null,"nodeType":null,"nodeValue":null,"nodeName":null,"jQuery17109208346924278885":null}]]
和FF输出:
*console output of **3** objects
Result:
[[{"jQuery171005647180282625541":13}]]*
有人可以解释一下,为什么它在这些浏览器中的工作方式不同,我怎么能修改它以便它可以在FF中与GH一样工作? BTW - '结果'本身在两种浏览器中都是一样的。
P.S。我使用that question进行censor()创建
答案 0 :(得分:0)
使用通过引用而不是值传递censor
的回调,然后简化实现:
var censor = "";
function censorRun(key, value)
{
if(censor == value)
return null;
else
return value;
}
JSON.stringify(result, censor);