有没有一种方法可以加载外部CSS文件,例如我们使用.getScript方法加载JS文件,也可以使用.getScript中的回调函数
$("<link/>", {
rel: "stylesheet",
type: "text/css",
href: "/styles/yourcss.css"
}).appendTo("head");
这在FireFox和类似版本中有效,但在IE中无效。
Answers:
在jQuery 1.4中:
$("<link/>", {
rel: "stylesheet",
type: "text/css",
href: "/styles/yourcss.css"
}).appendTo("head");
no。
基于响应的快速功能。
loadCSS = function(href) {
var cssLink = $("<link>");
$("head").append(cssLink); //IE hack: append before setting href
cssLink.attr({
rel: "stylesheet",
type: "text/css",
href: href
});
};
用法:
loadCSS("/css/file.css");
$("head").append("<link>");
var css = $("head").children(":last");
css.attr({
rel: "stylesheet",
type: "text/css",
href: "address_of_your_css"
});
var css = $('head > :last')是吗?
$("<link>").attr({ rel: "stylesheet", type: "text/css", href: "address_of_your_css" }).appendTo("head");
我认为OP想要做的是异步加载样式表并添加它。这对于Chrome 22,FF 16和IE 8中的我来说适用于存储为文本的CSS规则集:
$.ajax({
url: href,
dataType: 'text',
success: function(data) {
$('<style type="text/css">\n' + data + '</style>').appendTo("head");
}
});
就我而言,有时我还希望加载的CSS替换以前以这种方式加载的CSS。为此,我在开头添加了一个注释,说“ / *标记此ID = 102 * /”,然后可以执行以下操作:
// Remove old style
$("head").children().each(function(index, ele) {
if (ele.innerHTML && ele.innerHTML.substring(0, 30).match(/\/\* Flag this ID=102 \*\//)) {
$(ele).remove();
return false; // Stop iterating since we removed something
}
});
//load css first, then print <link> to header, and execute callback
//just set var href above this..
$.ajax({
url: href,
dataType: 'css',
success: function(){
$('<link rel="stylesheet" type="text/css" href="'+href+'" />').appendTo("head");
//your callback
}
});
对于Jquery 1.2.6及更高版本(省略上面的fancy属性功能)。
我这样做是因为,我认为这可以确保在尝试将所需的样式表粘贴到头部之前,它已由ajax加载。因此,在样式表准备好后执行回调。
这是一个将通过成功或失败回调加载CSS文件的函数。如果一个或多个资源加载失败,则仅会调用一次失败回调。我认为这种方法比其他一些解决方案更好,因为使用HREF将元素插入DOM会导致额外的浏览器请求(尽管该请求可能来自缓存,具体取决于响应标头)。
function loadCssFiles(urls, successCallback, failureCallback) {
$.when.apply($,
$.map(urls, function(url) {
return $.get(url, function(css) {
$("<style>" + css + "</style>").appendTo("head");
});
})
).then(function() {
if (typeof successCallback === 'function') successCallback();
}).fail(function() {
if (typeof failureCallback === 'function') failureCallback();
});
}
用法如下:
loadCssFiles(["https://test.com/style1.css", "https://test.com/style2.css",],
function() {
alert("All resources loaded");
}, function() {
alert("One or more resources failed to load");
});
这是另一个将加载CSS和javascript文件的函数:
function loadJavascriptAndCssFiles(urls, successCallback, failureCallback) {
$.when.apply($,
$.map(urls, function(url) {
if(url.endsWith(".css")) {
return $.get(url, function(css) {
$("<style>" + css + "</style>").appendTo("head");
});
} else {
return $.getScript(url);
}
})
).then(function() {
if (typeof successCallback === 'function') successCallback();
}).fail(function() {
if (typeof failureCallback === 'function') failureCallback();
});
}