0

我想匹配 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');

注意:查看 $(data) 的内容,JQuery 解析器似乎去除了任何 Javascript 标记。

4

2 回答 2

3

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

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

你应该像这样使用它:

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

它将具有匹配的内容。

于 2013-04-23T07:49:52.017 回答
0

$(htmlstring) 似乎从 HTML 中删除了任何脚本标签。这是一种耻辱。

我想出的解决方案是基于如何让正则表达式匹配多个脚本标签的答案中的正则表达式?

        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 后立即执行。

于 2013-04-23T08:37:31.490 回答