JQuery选择器匹配动态加载的脚本标记

时间:2013-04-23 07:31:20

标签: jquery jquery-selectors script-tag

我想匹配Ajax下载文档中的任何原始脚本,所以我尝试了

$.ajax({
    url: url,
    type: "post",
    success: function (data, status, xhr) {
        var scr = $(data).find('script[type="text/javascript"]');

该呼叫正在返回成功,但选择器未返回匹配,即 'script[type="text/javascript"]'的长度为0.

正在加载的页面(即data)肯定包含一个测试脚本标记,如下所示:

    <script type="text/javascript">
        $(function () {
            alert("JS running");
        });
    </script>

我在这里缺少什么?这是JQuery解析原始HTML的方式吗?

跟进:

这也不会返回匹配项: var scr = data.find('script');

注意:查看$(数据)的内容,看起来JQuery解析器会删除任何Javascript标记。

2 个答案:

答案 0 :(得分:3)

你需要在这里使用正则表达式。 使用Javascript .match

此外,您比较script[type="text/javascript"]的字符串与var:<script type="text/javascript">中的字符串不同。

您应该像以下一样使用它:

matched = data.match('<script .*</script>');

它将具有匹配的内容。

答案 1 :(得分:0)

$(htmlstring)似乎从HTML中删除任何脚本标记。这太遗憾了。

我提出的解决方案基于How to get regex to match multiple script tags?

的答案中的正则表达式
        var re = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
        var scripts = "";
        var match;
        while (match = re.exec(data)) {
            if (match[1] != "") {
                scripts += match[0];
            }
        }
        panel.append(scripts);

我连接任何内联脚本,脚本在附加到DOM后立即执行。