jQuery.data() 存储在哪里?
jQuery 将设置为 DOM 对象的 data()
值存储在哪里?
是否有某种变量,例如 jQuery.dataDb 或其他变量,甚至可能是私有变量?
有什么办法可以访问这个对象吗?
Where does jQuery store the values of the data()
that it sets to DOM objects?
Is there some kind of variable like jQuery.dataDb
or something, maybe even something private?
Is there any way to gain access to this object?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在内部,jQuery 创建一个名为
$.cache
的空对象,用于存储您通过 data 方法设置的值。您添加数据的每个 DOM 元素都会被分配一个唯一的 ID,该 ID 用作$.cache
对象中的键。Internally, jQuery creates an empty object called
$.cache
, which is used to store the values you set via the data method. Each DOM element you add data to, is assigned a unique ID which is used as a key in the$.cache
object.jQuery 以 3 种不同的方式为 3 种不同类型的对象获取或设置数据。
对于 DOM 元素,jQuery 首先获取一个唯一的 id,然后为元素创建一个名为 expando 的自定义属性:
另一方面,jQuery 有一个 $.cache 对象,它存储每个元素的数据映射,jQuery 搜索$.cache by Expando 并获取某个元素的数据映射,获取或设置该映射中的数据:
对于自定义对象(不是 DOM 元素或窗口对象),jQuery 直接通过名称从该对象设置或获取属性
:最后,对于特殊的窗口对象,jQuery 在闭包中有一个特殊的 windowData 变量来存储窗口的数据:
jQuery gets or sets data in 3 different ways for 3 different type of object.
For DOM element, jQuery first get a unique id, than create a custom property for element called expando:
On the other hand, jQuery has a $.cache object which stores data map for each element, jQuery searches $.cache by expando and get a data map for certain element, getting or setting data in that map:
For custom object(which is not DOM element or window object), jQuery directly set or get a property from that object by name:
At last, for the special window object, jQuery has a special windowData variable in closure to store data for window:
好吧,我想通了。
jQuery.expando
包含附加到每个元素的字符串,即jQuery + new Date()
HTMLElement[jQuery.expando]
包含该元素的data
jQuery.cache[HTMLElement[$.expando]]
包含元素这是一个演示
Ok I figured it out.
jQuery.expando
contains a string that's appended to each element which isjQuery + new Date()
HTMLElement[jQuery.expando]
contains the key to that element'sdata
jQuery.cache[HTMLElement[$.expando]]
contains thedata
on the elementHere is a demo