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 からすべてのスクリプト タグを取り除いているようです。それは残念です。

私が思いついた解決策は、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 に追加されるとすぐに実行されます。

于 2013-04-23T08:37:31.490 に答える