2

我正在通过我正在创建的 jquery 将一些数据分配给 html 对象,问题是当我从插件调用方法时,我分配的数据不再在对象中。

4

3 回答 3

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 中删除,但可能会保留其状态,以便您可以将其放回 DOM 中的其他地方或一段时间后。

注意:如果你从 DOM 中删除一个 DOM 元素而不使用jQuery函数(例如.removeChild()或通过分配给浪费内存空间。除了消耗一些额外的内存之外,它不会造成任何伤害。如果该信息包含对其他 javascript 或 DOM 元素的引用,则可能导致更大的内存泄漏。.innerHTML.data().data()

如果您正在使用.data()它,则会创建一种情况,即您希望坚持使用 jQuery 方法来处理任何可能导致 DOM 元素被删除的事情。通常使用 jQuery,您可以自由混合/匹配纯 javascript 和 jQuery,但这是不应该的一种情况。

于 2012-04-04T23:01:46.433 回答
1

使用的数据.data()只要:

  • jQuery 仍在您的页面中。jQuery 使用内部缓存来存储数据,使用.data(). 它永远不会在 DOM 上。

  • 只要您绑定数据的元素仍在附近,或者如果在 DOM 中被移除,它就会被.detach()

  • 你不重新加载页面。存储在其中的数据.data()不会通过页面重新加载而持续存在。

于 2012-04-04T22:56:32.400 回答
1

jQuery.data()文档:

jQuery.data()方法允许我们以一种安全的方式将任何类型的数据附加到 DOM 元素,从而避免循环引用,从而避免内存泄漏。jQuery 确保在通过 jQuery 方法删除 DOM 元素以及用户离开页面时删除数据。我们可以为单个元素设置几个不同的值并稍后检索它们:

于 2012-04-04T22:59:15.910 回答