这似乎不会在最近的将来得到解决。 Chrome Canary 仍然有这个问题。
我喜欢带有对象预览的新控制台行为,但我希望 jQuery 对象例外。
您可以“修补”console.log 一点点,使其像以前一样显示 jQuery 对象。
可以将 jQuery 对象“转换”为单独参数的列表。例如:
$('div');
在控制台中可以显示如下:
console.log('[', div[0], div[1], ..., ']');
我编写的脚本将只修改 jQuery 对象的 console.log 参数:
(function(){
var arraySlice = Array.prototype.slice;
var originalFunction = console.log;
var replaceObject = function(sourceArray, objectIndex) {
var currentObject = sourceArray[objectIndex];
var spliceArguments = Array.prototype.slice.apply(currentObject);
if(currentObject.length) {
// add commas and brackets
for(var i = spliceArguments.length - 1; i > 0; i--) {
spliceArguments.splice(i, 0, ',');
}
spliceArguments.splice(0, 0, objectIndex, 1, '[');
spliceArguments.splice(spliceArguments.length, 0, ']');
// patch source array
sourceArray.splice.apply(sourceArray, spliceArguments);
} else {
sourceArray.splice(objectIndex, 1, '[]');
}
};
var fixFunction = function() {
if(typeof jQuery === 'function' && jQuery.fn) {
var newArgs = Array.prototype.slice.apply(arguments);
for (var i = newArgs.length - 1; i >= 0; i--) {
if(newArgs[i] instanceof jQuery) {
replaceObject(newArgs, i);
}
}
originalFunction.apply(console, newArgs);
} else {
originalFunction.apply(console, arguments);
}
};
fixFunction.toString = function() {
return originalFunction.toString();
};
console.log = fixFunction;
}())
现在您可以在页面中包含此脚本以覆盖控制台行为,但这不是解决此问题的好方法,因此我将其封装在 Chrome Extension 中,它将自动为所有页面执行此操作。