我看到的是jQueryXXX=";YY“;添加到某些DOM元素的属性

我看到的是jQueryXXX=";YY“;添加到某些DOM元素的属性,jquery,Jquery,当我使用IE开发者工具时,一些DOM元素添加了如下形式的属性 jqueryxxxxxxxx=“YY” 其中XXXXX是一个相当长的数字字符串,YY通常是一个小的整数值 我在Safari上没有看到这些DOM检查器 为什么以及何时添加这些?数据对我有用吗?这是jQuery,它是对象上的一个键,用于在$.cache中查找其条目$。缓存用于存储事件、事件处理程序或任何您想保留在其中的内容,它是一个集中存储事件的地方(使触发全局事件更容易/更有效),也是一个用于清理的地方。通过仅在元素上携带属性,不必在每

当我使用IE开发者工具时,一些DOM元素添加了如下形式的属性 jqueryxxxxxxxx=“YY” 其中XXXXX是一个相当长的数字字符串,YY通常是一个小的整数值

我在Safari上没有看到这些DOM检查器

为什么以及何时添加这些?数据对我有用吗?

这是jQuery,它是对象上的一个键,用于在
$.cache
中查找其条目<代码>$。缓存用于存储事件、事件处理程序或任何您想保留在其中的内容,它是一个集中存储事件的地方(使触发全局事件更容易/更有效),也是一个用于清理的地方。通过仅在元素上携带属性,不必在每个元素上都有数据存储,因为这些元素可能无法跨浏览器正确克隆,相反,它只维护此键,并且可以在任何点在
$.cache
对象中查找其条目

让我们举一个例子:

domElement[$.expando] //only works in 1.4+, expando was private previously
这将给出一个“ID”或排序键,该键对应于存储该元素的数据/事件的对象上的属性(如果它有任何数据/事件处理程序)。例如,如果键是“4”,它将在内部用于访问
$.cache[4]

$.cache
包含jQuery分配的所有元素的所有数据、事件处理程序等。它是通过递增指定的(内部ID jquery会在任何时候将新对象添加到
$.cache
)中时分配和递增)


一些额外的位:

名称的随机性并不完全是随机的,
jqueryxxxxxxxxxxxxxxxxxx
是给属性一个唯一的、希望不会冲突的名称

为什么不使用
.html()
?来查看它呢?因为,它有一个

注意:
$.expando
未在1.3中公开,仅在1.4+中公开


用法:

它有用吗?例如,如果您在控制台中分析
$.cache
,您会发现内存泄漏(在许多调用之前没有,例如,将事件处理程序留在后面)。您打开控制台,然后执行$。缓存,您会在那里看到500个条目,假设您想知道哪个对象与312一起,然后您可以选择它,如下所示:

$("[" + $.expando + "=312]")[0] //DOM element for this entry
另一个例子是:

$("#myElem").data('events') //get events object, equivalent to:
$.cache[$("#myElem")[0][$.expando]].events

这是一个很方便的例子,一般jQuery用户不需要深入研究
$.cache
或它的工作方式,但它在那里,并且可以在您不需要查看的情况下使用。只需在控制台中运行
$。cache
,可能会有大量关于所有处理程序的信息,您不知道这些信息是可用的:)

我也注意到了这一点,因此由于expando,关于jQuery没有真正操作元素(添加自定义属性)的语句显然是错误的。@meder-它添加了一个属性yes,这与DOM中的attribute,attribute~=属性不同,但它们并不完全相同。而且,只有在使用jQuery添加事件或数据时才会发生这种情况,默认情况下它不会向所有元素添加任何属性:)非常清晰的响应。感谢您抽出时间发表讲话。