javascript - jQuery 如何使用 .data() 存储数据?

标签 javascript jquery

我有点困惑 jQuery 如何使用 .data() 函数存储数据。

这是不是叫做 expando 的东西? 或者这是使用 HTML5 Web 存储,尽管我认为这不太可能?

文档说:

The .data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore from memory leaks.

当我读到 expando 时,它似乎有内存泄漏的风险。不幸的是,我的技能不足以阅读和理解 jQuery 代码本身,但我想知道 jQuery 如何使用 data() 存储此类数据。

最佳答案

基本上 jQuery 在内部 javascript 对象中保存您使用 data(name, value)/data(name) 存储/检索并使用 removeData(name) 删除的信息名为缓存。剩下的只是一点点 javascript 魔法,让它工作并保持所有关联正确。

哦,然后回答你问题的第一部分。它既不是 expando 也不是 HTML5 WebStorage。

为了更正我自己,我认为 jQuery 确实有一次使用了 expando。它为您使用 data() 的那些元素设置一个属性,以向它们存储信息。属性名称看起来像这样

"jQuery" + now() //e.g. jQuery1268647073375

顺便说一句。 now() 是一个返回 (new Date).getTime()

的内部函数

值是由 jQuery 生成的 UUID

这样 jQuery 以后可以从它的内部缓存中检索正确的关联数据。

因此,如果您担心 IE 中的 expando,我记得您不能在其中删除它们,那么泄漏应该是最小的,因为 jQuery 仅对您存储数据的每个元素使用 1 个 expando。除非您对 1000 多个元素调用 data(),否则我看不到内存问题

关于javascript - jQuery 如何使用 .data() 存储数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2446098/

相关文章:

javascript - react : Can I check if a state exists before rendering it

javascript - 如何重置 Chart.Js 的图表?

javascript - 遍历所有 div 并在任何 td 中搜索,如果找到下一秒 td 值的获取值

javascript - 单击按钮开始的 SVG 路径动画

javascript - 刷新静态页面中的聊天记录

javascript - 构建库并包含 CSS 文件,但不包含测试文件

jQuery addClass() 不在 jQuery.ajax() 之前运行

jquery - 使用 jquery 验证电话号码

javascript - 在推特流加载时加载 chrome 扩展脚本

javascript - 如何访问匹配数组中的所有匹配