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

时间:2013-09-06 21:02:56

标签: javascript jquery html

使用jquery.load()我正在从包含javascript函数的文件中将一些html加载到我的页面中。

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

以下是测试来源:

的index.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>

的test.html

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

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

http://maccyd10.hostoi.com

2 个答案:

答案 0 :(得分:2)

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

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

e.g。以下内容将解除$('#loadEmbScrpt')$('#remEmbScrpt')上的点击事件中的功能:

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

或者如果你想要一行:

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

如果能解决您的问题,请告诉我

答案 1 :(得分:2)

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

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

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

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

  

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

当然可以从DOM中删除<script>元素 - 但是在浏览器解析之后这对javascript VM没有任何影响 - 因为那时javascript代码里面的javascript代码标记它已被VM使用和执行。代码运行后,就无法取消运行。

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

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

要执行您想要的操作,您应该删除#remEmbScrpt按钮,而是使用以下命令撤消已加载脚本执行的绑定:

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