Javascript jQuery如何使用.data()存储数据?
我有点困惑jQuery如何使用Javascript jQuery如何使用.data()存储数据?,javascript,jquery,Javascript,Jquery,我有点困惑jQuery如何使用.data()函数存储数据 这是一种叫做expando的东西吗? 或者这是使用HTML5网络存储,尽管我认为这是非常不可能的 文件说: .data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素,从而避免循环引用和内存泄漏 当我读到expando时,它似乎有内存泄漏的风险。不幸的是,我的技能不足以阅读和理解jQuery代码本身,但我想知道jQuery如何使用data()存储此类数据 jQuery.fn.extend中的函数数据正在使用此语句保存提
.data()
函数存储数据
这是一种叫做expando的东西吗?
或者这是使用HTML5网络存储,尽管我认为这是非常不可能的
文件说:
.data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素,从而避免循环引用和内存泄漏
当我读到expando时,它似乎有内存泄漏的风险。不幸的是,我的技能不足以阅读和理解jQuery代码本身,但我想知道jQuery如何使用data()
存储此类数据
jQuery.fn.extend中的函数数据正在使用此语句保存提供的变量:
jQuery.cache[ id ][ name ] = data;
jQuery.cache
只是一个标准对象,在jQuery名称空间中定义为cache:{},
所以回答您的问题-我相信jQuery将数据存储在名为缓存的标准内部JavaScript对象中
哦,关于你的内存泄漏问题-我真的不知道。如果JavaScript在标准JS对象中存储对DOM元素的引用时遇到一些问题,这可能是一个问题。基本上,jQuery会保存使用数据(名称、值)/data(名称)
存储/检索的信息,并在名为缓存的内部JavaScript对象中使用removeData(名称)
删除这些信息。剩下的只是一点javascript魔术,让它工作并保持所有关联正确
哦,来回答你问题的第一部分。它既不是expando也不是HTML5WebStorage
为了纠正我自己的错误,我认为jQuery确实有一次使用了expando。它在您用来存储信息的data()
元素上设置一个属性。属性名称如下所示
"jQuery" + now() //e.g. jQuery1268647073375
顺便说一句,now()
是一个内部函数,返回(新日期).getTime()
该值是jQuery生成的UUID
这样jQuery以后就可以从其内部缓存中检索正确的关联数据
因此,如果您担心IE中的expando,我记得您不能删除它们,那么泄漏应该是最小的,因为jQuery在每个存储数据的元素上只使用1个expando。除非对1000个元素调用data()
,否则我看不到内存问题它被浏览器本地放入缓存,就像cookie一样
from jquery uncompressed:
if ( data !== undefined ) {
thisCache[ name ] = data;
}
还可以查看-它从DOM元素中提取元数据并将其作为对象返回(在注释中讨论)。这是什么版本的。在1.4.2中没有这样的行?顺便说一句,即使是jQuery1.4.2也在使用名为cache的内部对象,所以asnwer仍然有效。语法稍有不同,但答案相同。我知道它在1.4.2中的工作原理与此类似。我当时正在查看1.4.2版本,不知道是否跳过了这一行。我知道你的回答仍然很正确