jQuery正在向节点添加一个奇怪的属性

6
我使用IE8和jQuery 1.4.2。 我的网页不再正确地呈现,并且在调试器中快速查看HTML后,我发现每个元素现在都有一个名为“jQuery1279875396122”的新属性,其值是一个小整数,显然对于每个节点都是唯一的。
通过查看jQuery源代码,我可以看到长数字来自(new Date).getTime(),但这就是我的理解极限,没有更多的研究。
我不知道这是否与我的呈现问题有关,但我从未在IE8或任何其他浏览器中注意到它。 有人能解释一下这些属性是什么吗?

你的HTML是否验证通过? - Pekka
您是否使用jQuery的“数据”功能来为元素分配数据?我认为这会向元素添加这些属性以跟踪唯一节点。但是,这不应以任何方式影响渲染。您能发个网址吗? - RoToRa
我们确实对某些元素使用data()。恐怕我无法发送URL,因为这是公司防火墙后面的开发项目。 - Charles Anderson
你使用的是哪个版本的jQuery?几年前曾经有一个错误被报告,但该错误被关闭为重复(另一个错误的表现),并且在1.3.2中修复了该重复。这听起来像是一个类似的情况。 - Andy E
1个回答

11

jQuery使用这些“expando”属性来跟踪与元素关联的数据。jQuery使用其数据API来处理事件以及您可能希望绑定到元素上的任何常规数据(使用$.data)。

该属性(jQuery1279875396122)将与jQuery.cache中的一个位置关联一个值。

jQuery不直接将数据保存到元素(作为常规属性)是为了避免内存泄漏并且通常会少一些干扰性。


仅以示例说明,当您将事件处理程序绑定到元素时,如下所示:

jQuery('div').click(doSomething);
doSomething函数将被存储在jQuery.cache中,并且在基本层面上,它的位置(或者说是引用它的对象的位置)将被分配给元素的jQuery1279875396122属性。当事件被触发时,jQuery仍将使用浏览器的本地API来绑定到元素的事件,但会在jQuery.cache中查找并调用正确的处理程序。 编辑:为了明确起见,这些属性不是令人担忧的原因。您应该期望在通过jQuery绑定任何数据(包括事件处理程序)的所有元素上看到它们。如果这是您渲染问题的原因,我会非常惊讶。

有趣。但我以前从未见过这些属性,而且我在Firefox / Firebug中仍然看不到它们。此外,每个节点都有一个,不仅仅是我们存储数据的节点。 - Charles Anderson
@Charles Anderson,您可能没有有意地将数据存储在这些节点中。jQuery使用其数据API进行内部任务。此外,expando属性仅在IE中作为属性可见(据我所知)。FF和其他浏览器将其视为常规DOM属性,因此它不会出现在实际的HTML中。 - James
我只是想表达一下我的信心,这些对渲染没有任何影响。 - Chris
我认为你说得对,这不是导致我的渲染问题的原因。我通常使用Firebug进行调试,因为它比IE的调试器更好用。因此,我没有花太多时间查看IE对HTML的视图。现在我遇到了一个IE8特定的问题,我不得不经常进入那里,并且我第一次注意到了这些扩展属性,这就是巧合。(顺便说一句,有时候IE8不会显示它们。)谢谢你详细解释它们是什么。 - Charles Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接