javascript - 如何清除从 JQuery.HTML() 检索到的 javascript 对象

标签 javascript jquery

我有一个具有以下要求的应用程序:

应用程序的页面始终包含页眉、主要内容(居中)和页脚。根据用户要求,页眉和页脚应保持静态,每当用户从一个页面导航到另一页时,应用程序应仅刷新主要内容(中心)而不刷新页眉和页脚。

该应用程序最初是由其他前同事设置的,它不是使用单页应用程序,但我们不喜欢使用 iframe 来实现上述要求。我们使用的方法是:使用JQuery从服务器获取页面,然后通过命令$(div).html();将页面渲染成一个专用的html div;

但是,现在我们注意到我们使用的方法存在一些潜在问题。从 JQuery 中检索到的页面,其中大部分包含 javascript 对象(变量、函数),默认情况下这些对象是全局的。如果不刷新/重新加载整个页面,javacript 对象将保留在那里,这可能会导致意外行为,更多的 javascript 对象将在页面中累积,从而影响性能。

我已经尝试过 JQuery.empty() 方法,但是它只清除 DOM 元素而不是那些 javascript 对象。

下面是我们如何将主要内容渲染到中心 div 中:

function switchPage(pageUrl) {
    $.ajax({
        url: context + pageUrl,
        cache: false,
        success: function(result) {
            $("#main-content-panel").html(result);
    }
   });
}

请告知有一种方法可以用最少的努力有效地清除那些 javascript 对象吗?或者,如果这些 JQuery 方法从一开始就是一个错误的选择,那么有什么可以是一种更改工作量最小的更好方法(因为我们已经构建了许多页面,因此我们希望将更改减到最少)。

质量问题。

最佳答案

这很脏,但你可以尝试快速解决:

如果您已经加载了全局 JavaScript,您唯一需要做的就是通过删除所有“script”标签从传入结果中删除所有 javascript。如果您需要使用例如保留一些脚本。新变量、要替换的函数等。您可以用例如标记它们。 “实时脚本”类:

function switchPage(pageUrl) {
    $.ajax({
        url: context + pageUrl,
        cache: false,
        success: function(result) {
          var $result = $(result).find("script:not(.live-script)").remove();
            $("#main-content-panel").html($result);
    }
   });
}

关于javascript - 如何清除从 JQuery.HTML() 检索到的 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738344/

相关文章:

javascript - HTML5 Canvas getImageData - 安全问题

javascript - 收到新数据时如何更新 d3 图表

javascript - 从元素检索文本时未定义

java - 哪个 JAXB bean 对应于这个 JSON?

jquery - 用户单击链接时无法加载 gif

javascript - 3 个 33.33% 宽度的 Div 在移动设备上变为 100% 宽度

javascript - 从十六进制创建以 0 开头的十进制颜色?

javascript - html动态生成表单但在发布时不在url中给出日期值

javascript - DataBinder.Eval 返回的值被解释为变量而不是字符串

javascript - 使用特定按钮提交表单