代码之家  ›  专栏  ›  技术社区  ›  James Sumners

为什么jQuery的$.get()不将脚本元素插入DOM?

  •  3
  • James Sumners  · 技术社区  · 14 年前

    我正在使用 $.get() 从远程服务器检索HTML片段并将该片段插入DOM。代码段包含几个基本的HTML元素和一个script元素。所有基本元素都会被插入,但脚本元素不会。

    示例代码段:

    <p>This is a paragraph</p>
    <script type="text/javascript">
    // JavaScript that will work with the HTML in the snippet
    </script>
    

    通过查看Chrome的web检查器中检索到的资源,我已经验证了脚本元素是否在检索到的代码段中。那么,为什么不呢 插入脚本元素,是否可以执行我想要执行的操作?

    编辑:

    $.get() 并用 $().html(data) .

    2 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    7 年前

    脚本元素应该被插入,就像静态内容一样-脚本不会执行。当你使用 html() 要插入html,它映射到每个元素的 内部HTML in certain circumstances

    这也反映在 definition of innerHTML

    注意:使用innerHTML插入的脚本元素在插入时不会执行。

    评估() 或者从文本中创建一个新的脚本元素并将其正确地插入DOM。

        2
  •  1
  •   Bruno Campos    14 年前

    执行此操作时,脚本元素不会绑定到文档。 你需要自己插入脚本。

    一种方法是调用回调函数,解析返回的html并手动插入脚本。就像这个: `

    _insertScripts: function(html) {
            var sfrag = '<script[^>]*>([\\S\\s]*?)<\/script>';
            var matchAll = new RegExp(sfrag, 'img');
            var matchOne = new RegExp(sfrag, 'im');
            if(html.match(matchAll)) {
                $.map(html.match(matchAll), function(script) {
                    eval( (script.match(matchOne) || ['', ''])[1] );
                });
            }
        }
    

    `