$.getScript,但用于jQuery中的样式表?

klr1opcd  于 2023-08-04  发布在  jQuery
关注(0)|答案(5)|浏览(106)

jQuery中是否有$.getScript等价物,但用于加载样式表?

clj7thdc

clj7thdc1#

CSS不是一个脚本,所以你不必“执行”它的意义上的脚本执行。
基本上,一个动态创建并附加到头部的<link>标记就足够了,如

$('<link/>', {
   rel: 'stylesheet',
   type: 'text/css',
   href: 'path_to_the.css'
}).appendTo('head');

字符串
或者是

var linkElem = document.createElement('link');
document.getElementsByTagName('head')[0].appendChild(linkElem);
linkElem.rel = 'stylesheet';
linkElem.type = 'text/css';
linkElem.href = 'path_to_the.css';


如果你不想使用jQuery的话。
浏览器将响应DOM中的更改并相应地更新页面布局。

编辑

我读到过旧的Internet Explorer在这方面有问题,你可能需要像回答这样做才能让它工作:
https://stackoverflow.com/a/2685639/618206

EDIT2

阅读文件内容并将其内联(在<style>标记之间)也是一个有效的解决方案,但这样CSS将不会被浏览器缓存。

deikduxw

deikduxw2#

我创建了一个$.getScript的替代方案来处理样式表。我把它叫做$.getStylesheet,原因很明显。
它实现了$.Deferred对象,这意味着你可以像这样链接:

$.when($.getStylesheet('css/main.css'), $.getScript('js/main.js'))
.then(function () {
  console.log('the css and js loaded successfully and are both ready');
}, function () {
  console.log('an error occurred somewhere');
});

字符串
下面是$.getStylesheet的小函数。它只是托管在Github Gist上,所以如果需要,我可以更新它。

u59ebvdq

u59ebvdq3#

你可以使用相同的方法$.getScript来“下载”样式表,因为$.getScript实际上只是另一个HTTP请求。但是由于CSS是不可执行的,所以它将有点连线。

f8rj6qna

f8rj6qna4#

这里有一个函数,它将加载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");
});


下面是另一个函数,它将同时加载CSSJavaScript文件:

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();
    });

}

h79rfbju

h79rfbju5#

如果不想缓存

var date = new Date().getTime();
document.head.innerHTML += '<link rel="stylesheet" type="text/css" href="/templates/primary/style/edit_styles.css?='+date+'">';

字符串

相关问题