这是 jQuery 添加到与其交互的每个 DOM 元素的 uuid/jQuery.expando,以解决浏览器内存泄漏问题。
旧样式代码等待 window.onunload 将 Javascript 数据与 DOM 标签解除绑定,以防止内存泄漏。 JQuery 通过在属性中使用一个简单的数字(如代码示例中的数字)来避免这种情况,然后在 Javascript 中保留标签和数字的哈希图(它称为 uuid)。
奇怪的属性名是 jQuery.expando 的值,你可以在代码中很容易地搜索到它每次都被设置为一个随机值。这样做是为了允许多个 jQuery 副本在页面上共存,而不会相互干扰。
我不知道我曾经需要在同一页面上需要多个 jQuery 的用例,而且我怀疑您也不需要此功能 - 您只需消除此功能即可轻松解决此问题特征。修改代码以将 jQuery.expando 设置为一些硬编码值,例如“jquery”,而不是随机数,这样就可以了。
注意不要在同一个页面中使用 jQuery 两次!尽管偶然这样做也会引入许多其他奇怪的副作用(例如重用 $),但这一点可能没有实际意义。
我在这个问题中更详细地介绍了 jQuery.expando/uuid:
Why Doesn't JQuery Expose its UUID Functionality?
在那篇文章中你会注意到该属性的值是随机的——它是一个计数器,基于到目前为止 jQuery 与多少标签进行了交互。如果你的代码要求属性值保持一致,你还是会遇到麻烦。
更新
您需要修改您的 jquery 源。例如 1.6.2:
http://code.jquery.com/jquery-1.6.2.js
包括以下内容:
jQuery.extend({
cache: {},
// Please use with caution
uuid: 0,
// Unique for each copy of jQuery on the page
// Non-digits removed to match rinlinejQuery
expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
您可以按如下方式更改扩展行:
// Does not support multiple copies of jQuery on the same page!
// 0 included to match rinlinejQuery (/jQuery\d+/)
expando: "jQuery0",