如何使用 jQuery 在 ajax 请求后替换页面的整个 CSS?
我有一个链接了一个 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 href 替换当前的 CSS href,瞧?
由于某种原因,jQuery 无法在 标记内找到来自 AJAX 请求的任何内容。此外,jQuery 甚至无法从 AJAX 数据中找到整个
本身。换句话说,回调函数内的
$(data).find('head').size()
返回 0。
我使用的是 jQuery 1.4。
2010 年 2 月 10 日更新:我向 jQuery 提交了一个有关此问题的错误,他们同意不可能从 ajax 数据的 标记中找到任何内容。 这是我得到的回复:
http://dev.jquery.com/ticket/6061#comment:1 —“是的,这是正确的 - 解析 直接 HTML 我们只保证 body 元素的内容。如果你 希望访问页面的 XML 直接然后我建议你 显式地将文件设为 .xhtml 或 以 XML 形式请求,例如:"
I have a document with one CSS linked in. How can I replace the current CSS with one coming from a document that I just fetched with AJAX request using jQuery?
Here's the code I am trying right now, but with no success so far:
$(function() {
$.get('next_page.html', function(data, textStatus) {
$('link[rel=stylesheet]:first')
.attr('href', $(data).find('link[rel=stylesheet]:first').attr('href'));
});
});
Update: $.find() does not work in any browser (tested Firefox 3.5,
Chrome and Safari 3 on Mac), but
$.filter() found the stylesheet only
in Firefox 3.5 - still nothing in
Chrome and Safari 3.
It should be plain simple, right - replace the current CSS href with the new one, and voilá?
For some reason, jQuery fails to find anything inside the <head>
tag that is coming from AJAX request. Furthermore, jQuery even fails to find the whole <head>
itself from the AJAX data. In other words, $(data).find('head').size()
inside the callback function returns 0.
I am using jQuery 1.4.
UPDATE Feb 10, 2010: I filed a bug about this to jQuery and they agreed it is not possible to find anything from the <head>
tag from an ajax data.
Here's the response I got:
http://dev.jquery.com/ticket/6061#comment:1 — "Yep, that's correct - parsing
straight HTML we only guarantee the
contents of the body element. If you
wish to access the XML of the page
directly then I recommend that you
explicitly make the file .xhtml or
request it as XML, for example:"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个 jquery 应该这样做:
This jquery should do it:
试试这个:
您实际上并没有在自己的示例中进行 AJAX 调用,也许这就是问题所在,或者您只是忘记添加
.load
部分?考虑到它位于 $(document).ready(function() { ... }); 块内,这应该可以正常工作。Try this:
You were not actually making an AJAX call in your own example, perhaps that was the problem or you just forgot to add the
.load
part? This should work just fine, given that it is inside the$(document).ready(function() { ... });
block.根据 jQuery 开发团队的说法,这是有效的 —“解析直接 HTML,我们仅保证 body 元素的内容。如果您希望直接访问页面的 XML,那么我建议您显式创建文件 .xhtml 或将其请求为 XML , 例如:”
This is valid as per jQuery dev team — "parsing straight HTML we only guarantee the contents of the body element. If you wish to access the XML of the page directly then I recommend that you explicitly make the file .xhtml or request it as XML, for example:"
我可以在我的网站上使用它。我只是将 id 添加到加载 css 的链接标记中。然后你改变 attri href (你做对了那部分)。
HTML:
我使用选择让用户选择他的皮肤。
i have it working on my site. I simply added an id to my link tag where my css is loaded. and then you change the attri href (you got that part right).
HTML:
And the i use a select to let the user choose his skin.