如何应用使用jQuery动态加载的内联和/或外部CSS

Sim*_*ver 41 css ajax jquery

我有一个使用jQuery加载到Yahoo弹出窗口的Ajax控件.

我只是使用一个简单的.get请求来加载HTML.

  $.get(contentUrl, null, function(response) {
         $('#dialog').find('.bd').assertOne().html(response);
     }, "waitDlg");
Run Code Online (Sandbox Code Playgroud)

现在问题是加载的内容需要自己的CSS,实际上是动态创建的.我可以选择内联或使用外部CSS样式表.

在Chrome中进行测试表明,使用上述代码在添加到DOM时,不会评估/应用通过AJAX加载的CSS.

Internet Explorer会评估内联css,因为它只会陷入DOM,但Chrome不会.由于完全不相关的问题,我目前无法在FireFox中进行测试.

有没有办法在jQuery中评估一个动态添加到DOM的样式表作为内联或?

我有很多理由要这样做:

  • 弹出窗口中的css属于弹出窗口,可能来自不同的环境
  • 它是动态的,我不想把它放在父页面,除非我绝对必须
  • 我打算让它像这样工作,它不会!:-(

Sho*_*og9 76

给定样式表的路径(或一些将生成有效CSS的URL):

var myStylesLocation = "myStyles.css";
Run Code Online (Sandbox Code Playgroud)

......其中一个应该有效:

使用AJAX加载

$.get(myStylesLocation, function(css)
{
   $('<style type="text/css"></style>')
      .html(css)
      .appendTo("head");
});   
Run Code Online (Sandbox Code Playgroud)

使用动态创建的<link>加载

$('<link rel="stylesheet" type="text/css" href="'+myStylesLocation+'" >')
   .appendTo("head");
Run Code Online (Sandbox Code Playgroud)

使用动态创建的<style>加载

$('<style type="text/css"></style>')
    .html('@import url("' + myStylesLocation + '")')
    .appendTo("head");
Run Code Online (Sandbox Code Playgroud)

要么

$('<style type="text/css">@import url("' + myStylesLocation + '")</style>')
    .appendTo("head");
Run Code Online (Sandbox Code Playgroud)

  • 如果StackOverflow有一个包含所有浏览器和版本的小弹出测试矩阵,我们可以标记哪些组合适用于每个答案,那将会很酷.有点像这个http://matrix.cpantesters.org/?dist=WWW-Mechanize+1.72 (8认同)

use*_*905 27

接受的答案将不适用于IE 7(以及IE 8中的错误).以下将适用于IE以及FF和chrome/safari:

var url = 'urlOfStyleSheet.css'
if(document.createStyleSheet) {
    try { document.createStyleSheet(url); } catch (e) { }
}
else {
    var css;
    css         = document.createElement('link');
    css.rel     = 'stylesheet';
    css.type    = 'text/css';
    css.media   = "all";
    css.href    = url;
    document.getElementsByTagName("head")[0].appendChild(css);
}
Run Code Online (Sandbox Code Playgroud)