随着jquery.load()
我从也包含javascript函数的文件中将一些html加载到我的页面中。
稍后我尝试使用删除html和javascript,jquery.empty
但似乎一旦浏览器解析了脚本,我将无法摆脱它,因此我正在寻找有关如何执行此操作的建议。
以下是测试源:
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)。
就像其他人提到的那样,DOM和Javascript VM是浏览器中的两个独立的系统。
DOM是浏览器要呈现的HTML文档的内部模型。它处理诸如HTML元素之类的HTML元素<script>
及其在HTML文档中的位置。
Javascript VM处理javascript代码-它处理在<script>
标记内运行或从外部js文件提取的任何Javascript代码。
似乎一旦浏览器解析了脚本,我就无法摆脱它
您当然可以<script>
从DOM中删除该元素-但是在浏览器对其进行解析之后,这将对javascript VM产生零影响-因为该标签内的javascript代码已经被VM使用并执行了。一旦代码运行,就不能取消运行。
在示例jsfiddle的情况下,这更加清楚-删除<script>
包含函数的元素并不意味着一旦<script>
VM中的代码已被执行,就不能再调用该函数。VM具有自己的函数内部模型,执行后在DOM中对原始代码的更改与它无关。
<script>
在这种情况下,使用javascript从DOM中删除包含元素实际上是没有意义的-这只是多余的。DOM呈现引擎没有用,因为它不是视觉元素,而javascript VM也没有用,因为它已经被处理了输入。
要执行您想要的操作,您应该删除#remEmbScrpt
按钮,而使用以下命令撤消已加载脚本执行的绑定:
$('#testButton').off('click');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句