如何从我的网页中删除一些 JavaScript

How can I remove a some javascript from my webpage?

本文关键字:删除 JavaScript 网页 我的      更新时间:2023-09-26

有了jquery.load(),我从一个也包含javascript函数的文件加载了一些html到我的页面中。

后来我尝试使用 jquery.empty 删除 html 和 javascript,但似乎一旦脚本被浏览器解析,我就无法摆脱它,所以我正在寻找有关如何执行此操作的建议。

以下是测试源:

索引.html

<head>
<script src="//code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
<script>
$(function(){
  $('#loadEmbScrpt').click(function(){
       $('#embDiv').load('http://maccyd10.hostoi.com/test.html');      
     });
   $('#remEmbScrpt').click(function(){
      $('#embDiv').empty();
   });
 });

<body>
<div id="embDiv"></div>
<div id="output"></div>
<input type="button" id="loadEmbScrpt" value="embed script into page"/>
<input type="button" id="remEmbScrpt" value="remove embedded script from page"/>
<input type="button" id="testButton" value="run embedded script test function"/>
</body>

测试.html

<script>
$('#testButton').on('click',function(){
 $('#output').append("<p>test</p>");
});
</script>

这是上述操作的链接(由于XSS保护,我无法将其发布到jsfiddle)。

http://maccyd10.hostoi.com

玩一玩这个 http://jsfiddle.net/6eWRQ/

正如其他人所提到的,DOM和Javascript VM是浏览器中的两个独立系统。

DOM 是要呈现的 HTML 文档的浏览器内部模型。它处理HTML元素,如<script>及其在HTML文档中的位置。

Javascript VM 处理 JavaScript 代码 - 它处理在 <script> 标记或从外部 js 文件中提取的任何 Javascript 代码。

似乎一旦脚本被浏览器解析,我就无法摆脱它

您当然可以从 DOM 中删除 <script> 元素 - 但在浏览器解析它之后,这将对 javascript VM 产生任何影响 - 因为标签中的 javascript 代码已经被 VM 使用和执行。代码运行后,无法取消运行。

在示例 jsfiddle 的情况下,这一点更加清楚 - 删除包含函数的 <script> 元素并不意味着一旦 VM 已经执行了<script>中的代码,就不能再调用该函数。VM 有自己的函数内部模型,在执行后对 DOM 中的原始代码的更改与它无关。

在这种情况下,使用 javascript 从 DOM 中删除包含<script>元素实际上是没有意义的 - 它只是多余的。DOM 渲染引擎对它没有用处,因为它不是一个可视元素,而 javascript VM 对它没有用处,因为它是已经处理过的输入。

若要执行所需的操作,应删除"#remEmbScrpt"按钮,并改为使用以下操作撤消加载的脚本执行的绑定:

$('#testButton').off('click');

正如评论中提到的,一旦加载了javascript,你就无法摆脱它。

话虽如此,如果您希望撤消上面发布的脚本所做的更改,.off()函数将取消绑定所有附加到处理程序的内容(因此,如果任何其他事件附加到单击,它们将被删除)。

例如,以下内容将从$('#loadEmbScrpt')$('#remEmbScrpt')上的单击事件中解绑函数:

$('#loadEmbScrpt').off('click');
$('#remEmbScrpt').off('click');

或者,如果您希望全部在一行中:

$('#loadEmbScrpt,#remEmbScrpt').off('click');

让我知道这是否解决了您的问题