Javascript Jquery在外部样式表更改/重新加载承诺方式后执行代码
Javascript Jquery execute code after external stylesheet changed / re-loaded the promise way
我有一个包含几个主题的页面,允许用户通过组合框进行更改。在组合框change
事件中,我使用 jquery 删除当前样式表并附加新样式表。现在我想在新样式表完成加载后运行一些代码(重新计算元素的大小,...)。
想知道我是否可以按照承诺的方式做到这一点?目前我正在使用setTimeout
但在我看来时机不够好。我在想这样的事情:
var oldStylesheet = ...;
var newStylesheet = ...;
$.when(function() {
var d = $.Deferred;
oldStylesheet.remove();
newStylesheet.append();
// when new stylesheet completed loading: d.resolve();
return d.promise;
}).done(function() {
// code to run after new stylesheet has completed loading
});
您可以在 jQuery 中使用 $.get()
AJAX 函数来处理您的用例,假设组合框中的选项值是样式表的 url:
var oldStylesheet = ...;
$('.theme-select').on('change', function(){
var stylesheet = $(this).val();
$.get(stylesheet , function(response){
oldStylesheet.remove();
// Check if the style tag in which the file will be appended is in place
// if not create one
if (!$('.custom-theme').length){
$('head').append('<style class="custom-theme"></style>');
}
// Add/Replace the new style with the old one.
$('.custom-theme').text(response);
});
});
我还没有测试过它,所以我不知道是否有错误或什么没有。
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 如何使失败的路由解析承诺加载不同的模板URL
- 表现出承诺'加载状态
- 使用链式 Q 承诺异步加载的局部变量
- Ember.RSVP.hash 重新加载内部承诺
- Javascript Jquery在外部样式表更改/重新加载承诺方式后执行代码
- AngularJS使用承诺和索引数据库 - 在页面上后将内容加载到控制器
- AngularJS:信守承诺以保证某些东西已经加载
- 为什么这个图像访问加载错误在承诺脚本小提琴上
- Javascript承诺以相反的顺序加载
- 使用ajax承诺将内容异步加载到页面中
- 如何在复杂的资源加载序列中正确链化承诺
- 在没有承诺的情况下多次调用同一个异步函数加载数据
- 为什么我的Dojo ContentPane在加载内容后没有解决它的承诺?
- Angular会重新加载一个已经存在的承诺
- Angular'的资源承诺在加载数据时不会重新渲染
- 在 angularjs 中修改页面后再次重新加载承诺
- 使用承诺的顺序加载
- Angular承诺队列和显示加载数据