如果只将接收到的HTML的一部分插入到DOM中,为什么jQuery不执行Javascript?

时间:2010-11-12 10:16:57

标签: javascript jquery ajax

我有以下文件将通过AJAX加载:

<div id="container">
    <div>I  need this in AJAX and the following scripts too</div>
    <script type="text/javascript">
        alert('I am executed');
    </script>
    <script type="text/javascript" src="some_included_script.js"></script>
 </div>

<div>I do not need this in AJAX</div>

如果我按以下方式加载它:

  $.ajax({
          url: url,
          type: "GET",
          cache: false,
          dataType: "html",
          success: function(data) {
              $('#my_big_container').html(data);
         }
     });

然后执行所有脚本,并从服务器请求some_included_script.js并执行。没问题。

但如果我只需要“容器”中的部分并尝试以下代码:

  $.ajax({
          url: url,
          type: "GET",
          cache: false,
          dataType: "html",
          success: function(data) {
              $('#my_big_container').html(
                    $(data).filter('#container').html()
              );
         }
     });

然后没有任何脚本被执行,也没有some_included_script.js的请求(尽管“容器”的简单HTML内容正确插入'my_big_container'。

为什么在我使用整个“数据”时脚本会被执行,而在我只过滤其中的一部分时却不会执行?

如何只加载接收数据的一部分并自动执行内部脚本?

1 个答案:

答案 0 :(得分:1)

我认为这有效:

而不是:

success: function(data) {
    $('#my_big_container').html(
        $(data).filter('#container').html()
    );
}

试试这个:

success: function(data) {
    $('#my_big_container').html(
        $("<div>").html(data).find('#container')
    );
}