我正在通过我正在创建的 jquery 将一些数据分配给 html 对象,问题是当我从插件调用方法时,我分配的数据不再在对象中。
3 回答
了解如何.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 中的其他地方或一段时间后。
注意:如果你从 DOM 中删除一个 DOM 元素而不使用jQuery函数(例如.removeChild()
或通过分配给浪费内存空间。除了消耗一些额外的内存之外,它不会造成任何伤害。如果该信息包含对其他 javascript 或 DOM 元素的引用,则可能导致更大的内存泄漏。.innerHTML
.data()
.data()
如果您正在使用.data()
它,则会创建一种情况,即您希望坚持使用 jQuery 方法来处理任何可能导致 DOM 元素被删除的事情。通常使用 jQuery,您可以自由混合/匹配纯 javascript 和 jQuery,但这是不应该的一种情况。
从jQuery.data()
文档:
该
jQuery.data()
方法允许我们以一种安全的方式将任何类型的数据附加到 DOM 元素,从而避免循环引用,从而避免内存泄漏。jQuery 确保在通过 jQuery 方法删除 DOM 元素以及用户离开页面时删除数据。我们可以为单个元素设置几个不同的值并稍后检索它们: