如何清除从JQuery.HTML()

时间:2019-04-18 02:31:59

标签: 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方法最初是一个错误的选择,那么这可能是一种花费最少的更改就更好的方法(因为我们已经建立了许多页面,因此我们希望将更改最小化)。

TQ。

1 个答案:

答案 0 :(得分:0)

那很脏,但是您可以尝试快速解决:

如果已加载全局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);
    }
   });
}