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



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

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

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

但是,现在我们注意到我们使用的方法存在一些潜在的问题。从 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.

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

如果你加载了全局JavaScript alredy,你唯一要做的就是通过删除所有"脚本"标签从传入结果中删除所有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);
}
});
}

最新更新