在Chrome Dev Tools控制台中记录jQuery对象时显示元素?

最近Chrome Dev Tools似乎发生了一些变化。 使用console.log记录jQuery对象,用于在console.log中显示DOM节点的Element。 像这样的东西:

 [Employees] 

现在它已更改为可点击的对象,如下所示:

 [, context: ] 

有没有办法回到旧式对象日志记录甚至是不同的方法来调用console

我目前正在使用版本23.0.1271.64 。 不确定哪个版本带来了变化。

如果希望console.log()吐出DOM元素,则需要记录DOM元素而不是jQuery对象。 DOM元素始终可以作为jQuery选择器的第0个元素访问。 因此,从jQuery选择器访问实际DOM元素的方式如下:

  $("#someSingleDOMObjectSelector")[0] 

要使DOM元素以您希望的方式显示在日志中,您可以这样做:

  console.log($("#someSingleDOMObjectSelector")[0]); 

对于包含/返回多个DOM元素的jQuery选择器,您可以循环它们,如下所示:

  $('.someMultipleDOMObjectSelector').each(function(){ //console.log($(this)[0]); //or --> console.log(this); }); 

至于为什么Chrome的开发工具会这样做,我只能猜测它已经完成,因为将jQuery对象记录为对象更有意义。

我发现这有用:

 console.log.apply(console, $("a")); 

另外,如果你运行console.log = inspect; 从控制台内部,事物将以旧的方式输出,但是如果你只是从你的代码中执行它就不起作用,它必须来自控制台。

这一点在11月12日被Chrome开发人员打破,并且今天还没有修复。

使用https://github.com/pimvdb/jquery.chromelog将以前的行为恢复为变通方法。

语法略有不同:

 $('a').log() 

但它旨在反映Chrome的旧工作行为。

这是否回答了你的问题console.dir( element ) ..?

更新:
不要这样做

 console.dir( $("el") ); // Dont do this 

但使用:

 console.dir( document.getElementById("el") ); // Do this 

似乎这不会在最近的将来得到解决。 Chrome Canary仍有此问题。 我喜欢使用对象预览的新控制台行为,但我想要jQuery对象的exception。

您可以稍微“修补” 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扩展程序中 ,这将自动为所有页面执行此操作。