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

jQuery is adding a strange attribute to nodes

提问人:Charles Anderson 提问时间:7/23/2010 更新时间:7/23/2010 访问量:1176

问:

我正在使用 IE8 和 jQuery 1.4.2。我的网页不再正确呈现,在 HTML 的调试器中快速查看一下,每个元素现在都有一个名为“jQuery1279875396122”的新属性,其值是一个小整数,显然每个节点都是唯一的。

查看jQuery源代码,我可以看到长数字来自(new Date).getTime(),但这是我理解的极限,没有更多的研究。

我不知道这是否与我的渲染问题有关,但我以前从未注意到它,在 IE8 或任何其他浏览器中。有人可以解释一下这些属性是什么吗?

jQuery的 [HTML全文] 互联网浏览器-8

评论

0赞 Pekka 7/23/2010
您的 HTML 是否有效?
0赞 RoToRa 7/23/2010
您是否使用jQuery的功能将数据分配给元素?我认为这将这些属性添加到元素中以跟踪唯一节点。但是,这不应以任何方式影响渲染。你能发布一个URL吗?data
0赞 Charles Anderson 7/23/2010
我们确实对某些元素使用 data()。恐怕我无法发送 URL,因为这是公司防火墙后面的一个开发项目。
0赞 Andy E 7/23/2010
您使用的是哪个版本的jQuery?几年前有一个错误被提交,但它被作为重复项(另一个错误的表现)关闭,并且重复项在 1.3.2 中得到了修复。这听起来像是一个类似的案例。

答:

11赞 James 7/23/2010 #1

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

属性 () 将具有与 中的位置关联的值。jQuery1279875396122jQuery.cache

jQuery不将数据直接保存到元素(作为常规属性)的原因是为了避免内存泄漏,并且通常不那么突兀。


举个例子,当你将事件处理程序绑定到元素时,如下所示:

jQuery('div').click(doSomething);

该函数将被存储在元素的属性中,并且在基本级别上,它的位置(或者更确切地说,引用它的对象的位置)将被分配给元素的属性。jQuery 仍将使用浏览器的本机 API 绑定到元素的事件,但当它被触发时,jQuery 将查找 (in ) 并调用正确的处理程序。doSomethingjQuery.cachejQuery1279875396122jQuery.cache

编辑:需要明确的是,这些属性并不值得关注。您应该期望在通过 jQuery 绑定任何数据的所有元素(包括事件处理程序)上看到它们。如果这是您的渲染问题的原因,我会感到非常惊讶。

评论

0赞 Charles Anderson 7/23/2010
有趣。但是我以前从未见过这些属性,我仍然无法在 Firefox/Firebug 中看到它们。此外,每个节点都有一个节点,而不仅仅是我们存储数据的节点。
0赞 James 7/23/2010
@Charles Anderson,您可能没有故意将数据存储在这些节点中。jQuery 将其数据 API 用于内部任务。此外,expando 属性仅在 IE (AFAIK) 中作为属性可见。FF 和其他浏览器将其视为常规 DOM 属性,因此它不会出现在实际的 HTML 中。
0赞 Chris 7/23/2010
我只是想把我的信任票添加到这些对渲染根本没有影响的事实中。
0赞 Charles Anderson 7/23/2010
我认为你是对的,这不会导致我的渲染问题。我通常用 Firebug 进行调试,因为它比 IE 的调试器好得多。因此,我不会花太多时间查看 IE 的 HTML 视图。现在我遇到了一个特定于 IE8 的问题,我不得不经常去那里,而且我第一次注意到这些 expando 属性,因此是巧合。(顺便说一句,有时 IE8 不会显示它们。感谢您对它们的完整解释。