これは近い将来修正されないようです。Chrome Canary にはまだこの問題があります。オブジェクトのプレビューでの新しいコンソールの動作は気に入っていますが、jQuery オブジェクトの例外が必要です。
console.log
以前のように jQuery オブジェクトを表示するように少し「パッチ」を当てることができます。jQuery オブジェクトを個別の引数のリストに「変換」することができます。例えば:
$('div');
コンソールでは、次のように表示できます。
console.log('[', div[0], div[1], ..., ']');
console.log
jQuery オブジェクトのみの引数を変更するスクリプトを作成しました。
(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 拡張機能にラップしました。