当使用jQuery插入DOM时,JavaScript不会执行
JavaScript is not executed when inserted in DOM with jQuery
EDIT:filter()严重错误。将其更改为find(),但问题仍然存在。
这个代码对我有效:
$('#content')
.replaceWith($(
'<div>
<div id="content"> Hello <script type="text/javascript"> alert(123); </script>
</div>
</div>
'));
但事实并非如此:
$('#content')
.replaceWith($(
'<div>
<div id="content"> Hello <script type="text/javascript"> alert(123); </script>
</div>
</div>
').find('#content'));
唯一的区别是,在第二个例子中,我只想过滤HTML的一部分,然后将其插入DOM。
有什么想法吗?谢谢
编辑3:添加解决方案作为答案
这对我有效:
var newElements = $('<div><div id="content"><script>alert(123)</script></div></div>');
if (newElements.length > 1) {
for (var i = 1; i < newElements.length; i++) {
$('body').append(newElements[i]);
}
}
$('#content').html(newElements.find('#content').html());
原因是在第一次调用中创建元素时,会对所有脚本标记进行排序,并将它们放入一个数组中。
console.log($('<div><div id="content"><script>alert(123)</script></div></div>'));
结果:
[div, script]
很明显,当将.find()应用于该数组时,脚本标记会丢失。
相关文章:
- JavaScript执行暂时挂起页面
- 页面在我的javascript执行后重新加载,我不希望它这样做
- 如何在使用jQuery.html()时防止javascript执行
- 如何打开一个新窗口或选项卡,并将其提供给javascript执行
- 如何在Ajax加载新内容时停止JavaScript执行
- 如何使用xpath和Javascript执行器打印文本
- cakehp2.x用javascript执行控制器
- 如何在不使用javascript执行的情况下为函数分配参数
- Javascript执行顺序错误
- Javascript执行顺序和回调
- 如何在Javascript执行后防止浏览器锁定
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 在asp.net页面中显示javascript执行过程中的加载图标
- 基于浏览器窗口大小的条件 JavaScript 执行
- 使用 JavaScript 执行一行 PHP(不包括 PHP 文件)
- Dom 解析和 JavaScript 执行
- 为什么通过javascript执行php可以工作
- JavaScript执行路径
- 从javaScript执行服务器端代码
- 如何使用Javascript执行客户端web抓取