如何应用jQuerydynamic加载的内联和/或外部CSS

我有一个使用jQuery加载到雅虎popup窗口的Ajax控件。

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

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

现在的问题是,加载的内容需要自己的CSS,这实际上是dynamic创build的。 我可以select内联或使用外部CSS样式表。

在Chrome中进行testing显示,通过AJAX加载的CSS在使用上面的代码添加到DOM时不会被评估/应用。

Internet Explorer将评估一个内嵌的CSS时,它只是困在DOM中,但Chrome不会。 我目前无法在FireFox中进行testing,因为完全不相关的问题。

有什么办法在jQuery来评估一个样式表,dynamic地添加到DOM作为内联或?

我想要这么做的原因有很多:

  • popup窗口中的CSS属于popup窗口,可能完全来自不同的环境
  • 这是dynamic的,我不想把它放在父页面,除非我绝对必须
  • 我打算这样工作,它不是! 🙁

给你的样式表(或一些将生成有效CSS的URL)的path:

 var myStylesLocation = "myStyles.css"; 

…其中任何一个应该工作:

使用AJAX加载

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

使用dynamic创build的<link>加载

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

使用dynamic创build的<style>加载

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

要么

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

接受的答案将无法在IE 7(和IE 8中的越野车)工作。 以下将工作在IE以及FF和铬/ 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); } 
 var cssPath = "/path/to/css/"; var linkStr = document.createElement("&lt;link rel='stylesheet' type='text/css' href='"+cssPath+"' media='screen' /&gt;"); document.getElementsByTagName("head")[0].appendChild(linkStr);