为什么$('div#my')返回Object Reference而不是HTML Tag?

时间:2016-11-10 20:20:17

标签: javascript jquery google-chrome

我不知道我的Chrome浏览器会发生什么,但突然之间在控制台中执行$('div#my')的行为与以前完全不同。有一次我经历过这个,但后来它以某种方式恢复了,所以我不知道如何重现它,今天又发生了。

请观看视频:http://peaceevertvimg.org/jq.php

在视频中,我在两个不同的浏览器中$('div#my')

第一个浏览器不是chrome,但我相信它模仿Chrome,所以它的行为是我所期望的,而且我几乎总是经历过。因为目前我的chrome没有按预期工作,所以我必须用它来演示我的预期:当你做$('div#my)时,你直接看到html TAG,你可以很容易地看到标签的html内容,这是“ “在这种情况下。”

相比之下,在我的Chrome浏览器中,结果是不同的,当我$('div#my')时,我看到一个对象(n.fn.init),我无法立即看到“某事”,哪个是当然很不方便。但之前,我很确定它不是这样的,行为与第一个浏览器中的行为完全一样。

此视频中的简单网页为http://peaceevertvimg.org/jquery.php,您可以在Chrome浏览器中自行测试。而且我很确定大多数人会看到第一种行为。我的chrome发生了什么?(我已禁用所有扩展并将其更新到最新版本)

顺便说一句,是“HTML标签”和“对象参考”这两个不同结果的正确用语是什么?

*************更新*************

如果视频不足以理解我的要求以及我想要解决的问题,这两张图片可能会有所帮助。

图片#1:这是我预期的“正常”行为: enter image description here

图片#2:这是我遇到的当前行为: enter image description here

你可以看到巨大的差异,第一个更直观,立即揭示关键信息,而第二个不是,至少对我而言。导致这个问题的原因是什么?如何回到第一个?

2 个答案:

答案 0 :(得分:0)

$('div#my')不返回DOM引用。它返回一个围绕找到的元素的jQuery包装器。

$('div#my')[0]将返回DOM引用。或者,忘记jQuery并使用:

 document.getElementById("my");

...您将直接获得DOM参考

此外,由于应该/只会有一个具有给定ID的元素,因此不必使用div#my,只需使用#my

假设我们有<div id=someDiv>,然后我们写:

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

Chrome显示了这一点:

enter image description here

在第一个日志中,我们看到结果是一个包含一个元素(div)的jQuery对象。在第二个中,我们直接看到元素。

现在,根据您拥有的Chrome版本,您可能会看到第一个仅报告为[对象],但这不会改变基础结果。

答案 1 :(得分:-1)

来自:Devx(http://www.devx.com/codemag/Article/40923

  

选择器允许您选择DOM元素,以便您可以应用   使用jQuery的操作方法为他们提供功能。 jQuery使用了   CSS 3.0语法(加上一些扩展)来选择单个或多个   文档中的元素。你可能已经熟悉了CSS   来自HTML样式的语法。即使你不是,也很容易挑选   关键的CSS选择器功能。我会说jQuery   这就是我真正开始使用CSS的原因。您可以使用CSS语法   按ID,CSS类,属性过滤器或按其选择元素   与其他元素的关系。您甚至可以链接过滤条件   一起。看看这个简单的例子,它选择所有第二列   使用简单选择器的表中的TD元素:$(“#gdEntries   td:nth-​​child(2)“)。

     

jQuery Object:The Wrapped Set:Selectors返回一个jQuery对象   被称为“包裹集”,这是一种类似于阵列的结构   包含所有选定的DOM元素。你可以迭代   包装集像数组或访问单个元素通过   索引器(例如$(sel)[0])。更重要的是,您也可以申请   jQuery针对所有选定元素进行操作。 - 更多信息请访问:   http://www.devx.com/codemag/Article/40923#sthash.l8Mo8CbH.dpuf

你所看到的是jQuery.fn.init()返回的jQuery对象。

正在发生的是jQuery()被定义为jQuery.fn.init(),这是另一种说jQuery.prototype.init()的方式,它是选择器函数!这意味着没有人会调用jQuery.fn.init()或jQuery.init(),因为jQuery()IS .init()。

更多信息,请看一下jQuery代码:Help understanding jQuery's jQuery.fn.init Why is init in fn

至于问题的解决方案:https://chrome.google.com/webstore/detail/jquery-console-fix/jlmkkpkcgomkdpfhgjlpaaonhafnjgob?hl=en