我有一个链接了一个CSS的文档。如何使用来自我刚刚使用jQuery使用AJAX请求获取的文档中的CSS来替换当前的CSS?
这是我现在正在尝试的代码,但到目前为止还没有成功:
$(function() {
$.get('next_page.html', function(data, textStatus) {
$('link[rel=stylesheet]:first')
.attr('href', $(data).find('link[rel=stylesheet]:first').attr('href'));
});
});
更新: $ .find()无法在任何浏览器中运行(经过测试的Firefox 3.5, Mac上的Chrome和Safari 3,但是 $ .filter()仅找到样式表 在Firefox 3.5中 - 仍然没有 Chrome和Safari 3。
它应该很简单,正确 - 用新的CSS替换当前的CSS href,并且voilá?
由于某种原因,jQuery无法在来自AJAX请求的<head>
标记内找到任何内容。此外,jQuery甚至无法从AJAX数据中找到整个<head>
本身。换句话说,回调函数内的$(data).find('head').size()
返回0。
我正在使用jQuery 1.4。
更新2010年2月10日:我向jQuery提交了一个关于此问题的错误,他们同意不能从ajax数据的<head>
标记中找到任何内容。
这是我得到的回应:
http://dev.jquery.com/ticket/6061#comment:1 - “是的,这是正确的 - 解析 直接HTML我们只保证 身体元素的内容。如果你 希望访问页面的XML 直接然后我建议你 明确地生成文件.xhtml或 请求它为XML,例如:“
答案 0 :(得分:2)
这个jquery应该这样做:
$(document).ready(function() {
$.get("next_page.html", function(data) {
$("link[rel='stylesheet']").attr("href", $(data).filter("link[rel='stylesheet']").attr("href"));
});
});
答案 1 :(得分:1)
试试这个:
$.load('next_page.html', function(data) {
$('link[rel=stylesheet]:first').replaceWith($(data).find('link[rel=stylesheet]:first'));
});
您实际上并没有在自己的示例中进行AJAX调用,也许这就是问题,或者您只是忘了添加.load
部分?这应该可以正常工作,因为它位于$(document).ready(function() { ... });
块内。
答案 2 :(得分:1)
根据jQuery开发团队的说法这是有效的 - “解析直接HTML我们只保证body元素的内容。如果你想直接访问页面的XML,那么我建议你明确地生成文件.xhtml或者请求它作为XML,例如:“
$.ajax({ dataType: "xml", file: "some.html", success: function(data){ ... });
答案 3 :(得分:0)
我在我的网站上工作。我只是在我的链接标签中添加了一个id,我的css已经加载了。然后你改变了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>