更改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!