编辑: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。
有任何想法吗?谢谢。
EDIT3:添加解决方案作为答案
最佳答案
这对我有用:
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 - 使用jQuery插入DOM时不执行JavaScript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9823205/