我正在通过 ajax 加载页面。整页包括<html> <head> <body>
.
所以我需要调用所有应该在页面加载时调用的脚本。但是浏览器记住其中一些已经加载到这个窗口并且他不会再次执行它们。
如何删除所有加载的脚本?
或者更好的是,如何加载整个页面,但有一些旧对象在前一页的后台工作?例如上传和其他通信。
代码:
this.load = function(adr)
{
这个.iris();
$.ajax({
type: 'GET',
url: adr,
dataType: 'html',
success: function(data)
{
$("body").html(html);
}
});
编辑: 对不起伙计们,我可能写错了,因为你的答案很好但解决了其他问题,我可以自己解决。所以我会尝试用不同的方式来讲述。
我无法将初始化保存到函数或其他任何东西中
为什么 - 因为我正在使用一些模板,每个模板的插件(用于表单,callendar..)文件中都有 JS。 每个插件在加载脚本时立即通过匿名函数初始化自身。
所以当我通过 ajax 加载 HTML 时,它不会在这个新的 HTML 上初始化。 (例如不会发现也不会添加监听器)。
最佳答案
当您执行脚本时,您无法取消执行它,即使您替换了整个 DOM,它也会保留在范围内。
因此,如果您创建一个对象 window.a = new A();
并将 DOM 替换为 $('body').html(html);
, 该对象仍可作为 window.a
访问.
更新:
我想您的脚本定义包含在 <head>
中您可以在一个地方调用它们。
<!DOCTYPE html>
<html>
<head>
<script src="script1.js"></script>
<script src="script2.js"></script>
</head>
<body>
... content ...
<script>
window.onload = function () {
// initialization code here
};
</script>
</body>
</html>
放置初始化<script>
在存储 function
时也在头部在一个变量中。然后,当您加载新内容时,仅替换 <body>
的内容并调用函数。
<!DOCTYPE html>
<html>
<head>
<script src="script1.js"></script>
<script src="script2.js"></script>
<script>
var a = function () {
// initialization code here
};
var load = function (adr) {
$.ajax({
type: 'GET',
url: adr,
dataType: 'html',
success: function (data) {
data = data.exec(/<body[^>]*?>(.*)<\/body>/i);
$("body").html(data);
a(); // call the function after each load
}
});
};
</script>
</head>
<body onload="a()">
... content ...
</body>
</html>
关于javascript - 删除/重新加载已加载的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9217812/