我正在通过我正在创建的jquery为html对象分配一些数据,那就是当我从插件中调用一个方法时,我分配的数据不再存在于对象中。
答案 0 :(得分:5)
了解.data()
如何理解数据存在的时间非常有用。当您使用.data()
存储内容时,它会进入jQuery中的内部javascript数据结构。因此,在这方面,它只是一个javsacript变量,并且只要其他任何javascript变量存在,它就会存在。
这意味着一旦你离开页面,它就完全消失了 - 就像所有其他的javascript变量一样。
可以删除数据的另一种方式是,如果某些javascript代码专门从数据结构中删除了数据。通常只有在使用有意处置DOM对象的jQuery方法时才会发生这种情况。这可以使用$(elem).remove()
或$(elem).html("some html)
以及从DOM中删除元素的任何其他jQuery方法来完成。由于这些方法从DOM中删除了对象,因此jQuery“清理”与这些元素相关联的.data()
信息。一个特定的例外是.detach()
,它从DOM中删除了一个元素,但没有删除它的.data()
信息。这样做是为了允许你从DOM中删除它,但是可能保留它的状态,这样你就可以把它放回到其他地方或以后的某个地方。
注意:如果在不使用jQuery函数(例如.removeChild()
或分配给.innerHTML
)的情况下从DOM中删除DOM元素,jQuery将不会知道您已删除这些DOM元素和.data()
信息不会被清除 - 它本质上只会浪费内存中的空间。除了消耗额外的内存之外,它不会造成任何伤害。如果.data()
信息包含对其他javascript或DOM元素的引用,则可能导致更大的内存泄漏。
如果您正在使用.data()
,则会创建一个案例,您希望坚持使用jQuery方法来处理可能导致删除DOM元素的任何内容。通常使用jQuery,你可以自由地混合/匹配普通的javascript和jQuery,但这是一个你不应该这样做的情况。
答案 1 :(得分:1)
使用.data()
的数据只有:
jQuery仍然在你的页面中。 jQuery使用internal cache使用.data()
来获取数据。它永远不会出现在DOM上。
只要您绑定数据的元素仍然存在或在DOM中删除,它就会被.detach()
删除
您没有重新加载页面。存储在.data()
中的数据不会在页面重新加载时保留。
答案 2 :(得分:1)
来自jQuery.data()
文档:
jQuery.data()
方法允许我们以一种不受循环引用安全的方式将任何类型的数据附加到DOM元素,从而避免内存泄漏。 jQuery确保在通过jQuery方法删除DOM元素时以及当用户离开页面时删除数据。我们可以为单个元素设置几个不同的值并在以后检索它们: