3

我有一个链接了一个 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() 仅在 Firefox 3.5 中找到了样式表 - 在 Chrome 和 Safari 3 中仍然没有。

它应该很简单,对吧 - 用新的 CSS href 替换当前的 CSS href,瞧?

出于某种原因,jQuery 无法在<head>来自 AJAX 请求的标记内找到任何内容。<head>此外,jQuery 甚至无法从 AJAX 数据中找到整个自身。也就是说,$(data).find('head').size()回调函数内部返回 0。

我正在使用 jQuery 1.4。


2010 年 2 月 10 日更新:我向 jQuery 提交了一个关于此的错误,他们同意无法<head>从 ajax 数据的标记中找到任何内容。 这是我得到的回复:

http://dev.jquery.com/ticket/6061#comment:1 — “是的,这是正确的 - 解析直接 HTML 我们只保证正文元素的内容。如果您希望直接访问页面的 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

根据 jQuery 开发团队,这是有效的——“解析直接 HTML,我们只保证 body 元素的内容。如果您希望直接访问页面的 XML,那么我建议您显式创建文件 .xhtml 或将其请求为 XML , 例如:”

$.ajax({ dataType: "xml", file: "some.html", success: function(data){ ... });
于 2010-02-10T16:55:32.243 回答
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 回答
0

我让它在我的网站上工作。我只是在加载我的 CSS 的链接标签中添加了一个 id。然后你改变 attri href (你得到了正确的部分)。

HTML:

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

我使用选择让用户选择他的皮肤。

<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 回答