我有点困惑 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/