8

Chrome 24 有一种在console.log().

例如,console.log($("p"));这个 jsFiddle示例中输出这种疯狂:

▼[<p>, <p>, <p>, prevObject: jQuery.fn.jQuery.init[1], context: #document, selector: "p"]
  ► 0: <p>
  ► 1: <p>
  ► 2: <p>
  ► context: #document
    length: 3
  ► prevObject: jQuery.fn.jQuery.init[1]
    selector: "p"
  ► __proto__: Object[0]

我可以看到它将 DOM 元素的集合放在开头。但是,如果您尝试扩展一个<p>大部分为空的简单标签,它会在您身上抛出:

▼ 0: <p>
   accessKey: ""
   align: ""
 ► attributes: NamedNodeMap
  ...
  [stopping here for sanity's sake]

那么我该如何使用所有这些信息呢?我的第一直觉是把它驯服到它过去的样子,但再想想,里面确实有很多我可能想要访问的信息。但我很难理解我在看什么。其中大部分看起来像 jQuery 值。这是对象具有(或不具有)的每个 jQuery 值的列表吗?

► context:然后是事情和事情的整个问题► __proto__:。一旦你开始深入研究,__proto__你将永远不会停止。我认为它会无限下降!

我怎样才能开始学习如何使用这个新的输出?

编辑:我实际上刚刚意识到我仍在使用 Chrome 23,这不是 24 中引入的东西。这个帖子中有人说这是 Chrome 24 的问题,但也许它是 23 中的新问题?无论如何,我最近才开始在 jQuery 对象上注意到这一点。

编辑2:如果您只是在寻找如何记录旧方式,试试这个:(帽子提示

 console.log.apply(console, $("div"));
4

3 回答 3

2

在您的演示小提琴中,您正在记录 NodeLists 或 HTMLCollections。NodeList 中的每个元素都表示为数字索引 0、1、2 等。如果其中存在任何元素,0 是 NodeList 中的第一个。

当您展开元素时,您会看到 DOM Core 3 规范中定义的 HTML 元素的所有可用属性。有关此http://domenlightenment.com/#3.2的更多信息,请参阅此处,并在此处查看所有属性及其用途的列表:https ://developer.mozilla.org/en-US/docs/DOM/element 。这些在 Chrome 中都不是新的。

最新 Chrome 版本中的新功能是顶级记录对象,因此如果您刚刚打开控制台并输入:

console.log(window)

对我来说,当我刚刚这样做时,它记录了它在记录它时提供的扩展窗口对象的预览。因此,例如,您应该看到如下内容:

Window {is_minor: 5, bmi_ie6: false, careers_adselector: "div.hireme, div#hireme"...}

列表元素下方列出的其他 NodeLists 属性:

我稍微修改了小提琴,当您查看控制台时应该显示对象的预览http://jsfiddle.net/jaredwilli/H3YWq/2/

您也无法真正摆脱这些东西,它们是 DOM 的一部分,并且将始终存在,否则您正在查看的 NodeType 将不是 ElementNode。

于 2012-11-23T18:50:11.393 回答
0

你想要第一个元素,所以使用 [0]

作为另一种选择,请查看 Firefox 中的 Firebug。我知道,我也喜欢 chrome 并且每天都在使用它,但是 Firebug 是一个很棒的插件,我从来没有遇到过它的问题。

于 2012-11-26T04:42:57.753 回答
0

我和你一样对这种变化感到恼火。我知道这并不理想,但希望对您有所帮助。

console.log($('p')[0]);

您之前可能已经看过该解决方案,然后发现如果您处于循环中它不起作用,例如:

$('p').each(function(){
 console.log($(this)[0]);
});

这最终不会给你你习惯的结果,所以我不得不使用['context']而不是[0]这样:

$('p').each(function(){
 console.log($(this)['context']);
});

同样,我自己也在寻找更好的解决方案,但我想我会与你分享我的发现。

于 2012-11-21T05:31:19.247 回答