首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我看到一些DOM元素添加了jQueryXXX="YY“属性

我看到一些DOM元素添加了jQueryXXX="YY“属性
EN

Stack Overflow用户
提问于 2010-07-27 00:08:08
回答 1查看 1.1K关注 0票数 8

当我使用IE开发人员工具时,一些DOM元素添加了jQueryXXXXXXXXX=" YY“形式的属性,其中XXXXX是一个相当长的数字字符串,而YY通常是一个很小的整数值。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-27 00:16:36

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

让我们举个例子:

代码语言:javascript
运行
复制
domElement[$.expando] //only works in 1.4+, expando was private previously

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

$.cache包含由jQuery分配的所有元素的所有数据、事件处理程序等。它的赋值方式是递增$.uuid (一个内部不断攀升的ID会在任何时候向$.cache中添加新对象时赋值和递增)。

几个额外的比特:

名称的随机性并不都是随机的,jQueryXXXXXXXXXXXXXXXXXjust jQuery + the timestamp then jquery was loaded,以便为属性提供一个唯一的、希望不冲突的名称。

你为什么不在.html()中看到它呢?因为jQuery hides it,它做了regex to strip it out

注意:在1.3中没有公开$.expando,只有1.4+公开了。

用法:

它有用吗?例如,如果您在控制台中分析$.cache,您会发现存在内存泄漏(在多次.load()调用之前没有.empty(),例如留下事件处理程序)。你打开你的控制台,执行$.cache,你会看到500个条目,假设你想知道哪个对象符合312,然后你可以选择它,就像这样:

代码语言:javascript
运行
复制
$("[" + $.expando + "=312]")[0] //DOM element for this entry

再举一个例子,这是:

代码语言:javascript
运行
复制
$("#myElem").data('events') //get events object, equivalent to:
$.cache[$("#myElem")[0][$.expando]].events

这是一个很方便的示例,一般jQuery用户不需要深入了解$.cache或它是如何工作的,但它就在那里,如果您永远不需要查看它,它就可以使用。只需在控制台中运行$.cache,可能会有大量关于您的所有处理程序的信息,而您并不知道这些信息是可用的:)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3336672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档