【问题标题】:Loading HTML using JQuery's getScript multiple times after the HTML is removed over and over在一遍又一遍地删除 HTML 之后,使用 JQuery 的 getScript 多次加载 HTML
【发布时间】:2013-08-14 23:37:35
【问题描述】:

我有一个用 HTML/JavaScript/JQuery/CSS 编写的 SPA(单页应用程序)

每次单击导航链接时,主 div 都会通过 ajax 命令加载一大块 HTML/JavaScript/JQuery/CSS,并且 getScript 函数用于加载该块的 JavaScript/JQuery 部分。

一旦用户点击另一个链接,主 div 就会通过 remove() 函数被删除,并且带有 JavaScript/Jquery 的新块将替换它。

这里的问题是:当我在第二次、第三次等时间加载主 div 的内容时(如果用户点击另一个链接但又回到这个链接)我是否再次运行 getScript 函数来加载JavaScript/JQuery?如果是这样 - 它不会将“on”和其他事件相互绑定,还是 remove() 函数会处理它并且没有任何内存泄漏是安全的?

感谢您的回复!

【问题讨论】:

    标签: javascript jquery single-page-application getscript


    【解决方案1】:

    来自http://api.jquery.com/remove/

    与 .empty() 类似,.remove() 方法将元素从 DOM 中取出。当您想要删除元素本身以及其中的所有内容时,请使用 .remove()。除了元素本身之外,所有与元素关联的绑定事件和 jQuery 数据都将被删除。要删除元素而不删除数据和事件,请改用 .detach()。

    因此绑定在 div 及其后代上的所有事件都将被移除并可以安全地反弹。但是,如果您注入的 JavaScript 将事件绑定到 div 之外的内容,如文档、窗口、正文等。多个事件将被绑定,如果意外可能会导致问题。

    从 jQuery 1.4 开始,同一个事件处理程序可以多次绑定到一个元素。 这在使用 event.data 功能或其他唯一数据驻留在事件处理函数周围的闭包。

    http://api.jquery.com/on/

    如果您绝对必须从重复运行的脚本中绑定到更高级别的元素,那么您应该在绑定事件之前考虑使用off()

    【讨论】:

    • 我只使用“on”绑定,并且只绑定到特定的选择器,从不绑定到正文或 html 元素
    • 好吧,如果您的选择器在被删除的范围内,那么您是安全的。您可以通过隐藏和显示最后 n 个 div 而不是删除它们来提高性能,但我怀疑这是否值得。
    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2011-12-30
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多