编辑: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/

10-12 14:36