3

1つのCSSがリンクされたドキュメントがあります。現在のCSSを、jQueryを使用してAJAXリクエストでフェッチしたばかりのドキュメントからのCSSに置き換えるにはどうすればよいですか?

これが私が今試しているコードですが、今のところ成功していません:

$(function() {
    $.get('next_page.html', function(data, textStatus) {
        $('link[rel=stylesheet]:first')
            .attr('href', $(data).find('link[rel=stylesheet]:first').attr('href'));
    });
});

更新: $。find()はどのブラウザでも機能しません(MacでFirefox 3.5、Chrome、Safari 3をテスト済み)が、$。filter()はFirefox3.5でのみスタイルシートを検出しました。ChromeとSafari3ではまだ何も見つかりませんでした。

わかりやすくシンプルなはずです。現在のCSShrefを新しいものに置き換えてください。

何らかの理由で、jQueryは<head>AJAXリクエストから来ているタグ内の何かを見つけることができません。さらに、jQuery<head>はAJAXデータからそれ自体全体を見つけることさえできません。つまり、$(data).find('head').size()コールバック関数内では0が返されます。

私はjQuery1.4を使用しています。


更新2010年2月10日:これに関するバグをjQueryに提出しましたが<head>、ajaxデータからタグから何も見つけることができないことに同意しました。 これが私が得た応答です:

http://dev.jquery.com/ticket/6061#comment:1 —「その通りです。ストレートHTMLを解析すると、body要素のコンテンツのみが保証されます。ページのXMLに直接アクセスする場合は、ファイルを明示的に.xhtmlにするか、XMLとしてリクエストすることをお勧めします。例: "

4

4 に答える 4

2

このjqueryはそれを行う必要があります:

  $(document).ready(function() {
        $.get("next_page.html", function(data) {
            $("link[rel='stylesheet']").attr("href", $(data).filter("link[rel='stylesheet']").attr("href"));
        });
    });
于 2010-01-27T13:29:12.637 に答える
1

これを試して:

$.load('next_page.html', function(data) {
    $('link[rel=stylesheet]:first').replaceWith($(data).find('link[rel=stylesheet]:first'));
});

自分の例では実際にAJAX呼び出しを行っていませんでした。おそらくそれが問題だったのでしょうか、それとも単に.loadパーツを追加するのを忘れたのでしょうか。$(document).ready(function() { ... });ブロック内にあることを考えると、これは問題なく機能するはずです。

于 2010-01-27T12:09:29.357 に答える
1

これはjQuery開発チームによると有効です—「ストレートHTMLの解析では、body要素のコンテンツのみが保証されます。ページのXMLに直接アクセスする場合は、ファイル.xhtmlを明示的に作成するか、XMLとしてリクエストすることをお勧めします。 、 例えば:"

$.ajax({ dataType: "xml", file: "some.html", success: function(data){ ... });
于 2010-02-10T16:55:32.243 に答える
0

私はそれを私のサイトで動作させています。cssがロードされるリンクタグにIDを追加しただけです。次に、属性hrefを変更します(その部分は正しくなりました)。

HTML:

<link type="text/css" href="/llt_style/skin/nuit.css" rel="stylesheet" id="llt_skin_href"/>

そして、私はselectを使用して、ユーザーが自分の肌を選択できるようにします。

<select onchange="$('#llt_skin_href').attr('href', $(this).val());">
    <option value="/llt_style/skin/jour.css">Jour</option>
    <option value="/llt_style/skin/nuit.css">Nuit</option>
</select>
于 2012-11-16T21:54:49.913 に答える