更改css链接并等到新css加载
我想知道是否可以更改加载文档的样式表链接,然后等到加载新的css,然后运行适当的js代码
谢谢你的任何建议
HTML:
码:
$("#mystylesheet").load(function(){ //Your javascript }).attr("href", "/new/path/to/css.css");
这将替换您当前的CSS,并在获取新的CSS文件后执行.load()
处理程序中的任何代码。
@ahren几乎是正确的。 但是,当css文件通过动态更改链接元素上的href完成加载时使用回调似乎不适用于大多数移动设备。
而是尝试使用load直接将样式注入样式元素。最终得到大多数现代浏览器(包括移动浏览器)的支持
更新以包括对IE 8的支持; 注意这需要您在css中注入一个虚拟规则以validation何时加载了css(在这种情况下使用body {ready:true;})
CSS
body {ready:true;} ...
HTML
JavaScript的
if (document.createStyleSheet) { //Wait for style to be loaded var wait = setInterval(function(){ //Check for the style to be applied to the body if($('body').css('ready') === 'true') { clearInterval(wait); //CSS ready } }, 300); document.createStyleSheet(url); } else { //Dynamically load the css for this doc $("#your-style-element").load(url,function(){ //CSS ready }); }
试试这个男人: http : //forum.jquery.com/topic/loading-stylesheets-on-the-fly
或者: http : //www.rickardnilsson.net/post/2008/08/02/Applying-stylesheets-dynamically-with-jQuery.aspx 或 使用jQuery更改样式表
希望它符合原因:)
码
var link = $(""); link.attr({ type: 'text/css', rel: 'stylesheet', href: }); $("head").append( link );
您可以尝试我专门为此案例编写的插件 。
不确定jQuery
的.load()
方法,它似乎不是跨浏览器。 只有IE支持链接元素上的onload=""
事件,afaik。
这是我写的一篇关于47 LOC的完美作品:
https://gist.github.com/aleclarson/ac6456c75edae9fe9d9b6938142a065b
它使用requestAnimationFrame
检查每个帧上的document.styleSheets
,直到每个给定的URL片段都已加载。
例:
const styles = require('./styles') const promise = styles.onLoad('foo.css', 'bar.css') promise.then(() => console.log('Styles loaded!'))
纯粹的javascript!