2016-11-10 120 views
-1

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

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

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

第一个浏览器是不是Chrome,但我相信它模仿的Chrome所以它的行为是什么,我希望和我的时间几乎总是经历。因为目前我的Chrome浏览器没有按预期工作,所以我必须用它来证明我的期望:当你做$('div#my)时,你直接看到HTML标签,并且你可以很容易地看到标签的html内容,这是“东西”案件。

相反,在我的Chrome浏览器中,结果是不同的,当我做$('div#my')时,我看到一个对象(n.fn.init),我看不到“什么”,这当然是非常不方便的。但之前,我非常确定它不是这样,这种行为与第一个浏览器中的行为完全相同。

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

顺便说一句,是“HTML标签”和“对象引用”正确的话来描述这两个不同的结果?

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

如果视频是不足以明白我问我想要什么要解决,这两张照片可能会有所帮助。

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

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

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

+0

那后我和我看到它是封闭的,因为我完全重写了。 – shenkwen

+0

不,它不是完全重写,它是同一个问题 - 你不应该双重张贴。 (为了给你一个答案,我想我记得看到'fn.init'而不是元素引用,如果我登录jQuery对象到控制台之前我打开开发工具 - 即在我有机会弹出我的控制台之前,在页面加载之前,实际上记录的对象没有区别,除了chrome在它的开发工具中显示它的方式)。 – Adam

+0

你在另一个问题中看到的是我重写了所有内容之后,但是我看到这个问题被搁置了(或关闭了?),可能是因为重写之前编写不好。这就是为什么我打算关闭那个并在这里发布一个新的。 – shenkwen

回答

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

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

现在,根据您拥有的Chrome版本,您可能会看到第一个报告只是[Object object],但这并不会改变基础结果。

+0

你能否告诉我你的Chrome中的行为?第一个还是第二个? – shenkwen

+0

@shenkwen没关系。浏览器控制台显示不是跨浏览器的标准,重要的是它返回的是对象,而不是dom节点或数组。如果控制台向你展示它大多是无关紧要的(除了经常让陌生人混淆)。如果你想要dom节点,使用jQuery方法来达到这个目的:'.get(n)' –

+0

我明白两个结果是基本上是一样的东西。但问题是,以目前的行为来看,我很难与之合作。首先,您不会直接在所选标记中看到HTML内容包装,其次,当您将鼠标移到该标记上时,该元素不会在DOM中突出显示。 – shenkwen

-1

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

选择器可让您选择DOM元素,这样就可以申请 功能,将其与jQuery的操作方法。 jQuery使用一个 CSS 3.0语法(以及一些扩展)来选择文档中的单个或多个 元素。您可能已经熟悉HTML样式的CSS 语法。即使你不是,选择 的关键CSS选择器功能也相当容易。我会尽量说jQuery 是我真正开始讨论CSS的原因。使用CSS语法,您可以通过ID,CSS类,属性过滤器或与其他元素的关系来选择元素 。您甚至可以将过滤条件 连锁在一起。看一下这个简单的例子,它使用一个简单的选择器选择表格中的所有第二列 TD元素:$(“#gdEntries td:nth-​​child(2)”)。

jQuery对象:包装集:选择器返回一个名为“包装集”的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()是.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

+0

请问您在Chrome中的行为是什么?我该如何回到DOM参考之一?对我来说更方便。 – shenkwen

+0

@shenkwen我已经更新了我的答案。 –

+0

我简要地阅读了这个链接,这有点超出我的知识范围,但我仍然不明白为什么突然间我的Chrome的行为发生了这样的变化,更重要的是,我如何能够回到最初的行为。请注意我已经添加了两张图片来进一步阐明我所要求的内容。 – shenkwen

相关问题