我正在通过我正在创建的jquery为html对象分配一些数据,问题是当我从插件调用一个方法时,我分配的数据不再存在于对象中.
理解如何.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中删除它,但可能保留它的状态,以便您可以将其放回到其他地方或稍后的某个DOM中.
注意:如果你在不使用jQuery函数的情况下从DOM中删除DOM元素(例如.removeChild()或通过赋值.innerHTML),jQuery将不知道你已经删除了那些DOM元素并且.data()信息将不会被清除 - 它基本上只是在记忆中浪费空间.除了消耗额外的内存之外,它不会造成任何伤害.如果该.data()信息包含对其他javascript或DOM元素的引用,则可能导致更大的内存泄漏.
如果您正在使用.data()它创建一个案例,您希望坚持使用jQuery方法来处理任何可能导致删除DOM元素的方法.通常使用jQuery,你可以自由地混合/匹配普通的javascript和jQuery,但这是一个你不应该这样做的情况.