我看到jQueryXXX =“YY”属性添加到我的一些DOM元素中

前端之家收集整理的这篇文章主要介绍了我看到jQueryXXX =“YY”属性添加到我的一些DOM元素中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用IE开发人员工具时,一些DOM元素添加了属于该形式的属性
jQueryXXXXXXXXX = “YY”
其中XXXXX是一个相当长的数字字符串,YY通常是一个小整数值.

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

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

解决方法

这是jQuery expando attribute,它是用于在$.cache中找到它的条目的对象的关键. $.cache用于 .data(),事件处理程序或任何你想要留在那里的东西,它是一个集中的地方来存储事件(使得全局事件更容易/更高效)和一个清理的地方.通过只携带元素上的属性,没有必要在每个元素上都有一个数据存储,它可能无法正确克隆 – 跨浏览器,而只是维护这个键,并且可以在任何时候在$.cache对象中查找它的条目.

我们来举个例子:

domElement[$.expando] //only works in 1.4+,expando was private prevIoUsly

这将给出“ID”或类别的键,该键对应于存储该元素的数据/事件的$.cache对象上的属性(如果它具有任何数据/事件处理程序).例如,如果密钥是“4”,它将在内部用于访问$.cache [4].

$.cache包含jQuery分配的所有元素的所有数据,事件处理程序等.它是通过递增$.uuid(一个内部的攀爬ID jquery分配并在每个新对象添加到$.cache中时递增)来分配的.

一些额外的位:

名称随机性并非完全随机,jQueryXXXXXXXXXXXXXXXXX为just jQuery + the timestamp then jquery was loaded,为该属性提供一个独特的希望非碰撞名称.

你为什么不用.html()?看到它,因为jQuery hides it,它确实是regex to strip it out.

注意:$.expando不会在1.3中公开,只有1.4.

用法

它有用吗?嗯,它可以是,例如,如果您在控制台中分析$.cache,并且您发现内存泄漏(在许多.load()调用之前没有.empty(),例如留下事件处理程序).你打开你的控制台,做$.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,就可能有大量关于您不知道的所有处理程序的信息:)

猜你在找的HTML相关文章