使用jQuery插入DOM时不会执行JavaScript

时间:2012-03-22 13:25:44

标签: javascript jquery dom

编辑: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:添加了解决方案

1 个答案:

答案 0 :(得分:0)

这对我有用:

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()应用于该数组时,脚本标记将丢失。