我可以根据要求加载外部样式表吗?

$.getScript('ajax/test.js', function() { alert('Load was performed.'); }); 

..就像上面的代码加载一个外部JS的请求,有什么类似的可用于加载外部CSS样式表需要时?

例如,当我在我的网站上使用Lightbox(内联popup窗口)时,我想避免加载lightbox JS和CSS文件onload,除非用户请求。

谢谢

Yup:如果你创build一个链接到样式表的<link>标签并把它添加到<head>标签中,浏览器将加载该样式表。

例如

 $('head').append('<link rel="stylesheet" type="text/css" href="lightbox_stylesheet.css">'); 

然而 , 根据@ peteorpeter的评论 ,这不适用于IE 8或以下版本,您需要:

  1. 设置href 之前附加<link> 要么
  2. 使用IE的document.createStyleSheet()方法

另外,检查链接是否已经被添加在所有浏览器中都不可靠地工作。

我也会质疑你的部分前提:

我想避免加载灯箱的JS和CSS文件,除非用户要求。

为什么? 减less页面重量? 我可以理解这个愿望,但是你应该测量你的CSS和JS文件的大小(在缩小和压缩之后),并且不要看看这个缩放值是否值得:

  1. 加载按需加载的复杂性; 和
  2. 灯箱的响应能力略有下降(因为按需加载时,灯箱将不得不等待自己的CSS和JS加载,才能做到这一点)

缩小和缩小之后,可能没有太大的区别。

请记住,您可以指示浏览器caching您的CSS和JS很长一段时间,这意味着只有当用户使用空的caching访问您的网站时才会下载。

 $('<link/>', {rel: 'stylesheet', href: 'myHref'}).appendTo('head'); 

你可以这样做:

 $('<link>').attr('rel','stylesheet') .attr('type','text/css') .attr('href','link_to.css') .appendTo('head'); 

您只需在头部添加dynamicHTML内容即可添加对外部样式表的引用:

 $('head').append('<link rel="stylesheet" href="style.css" type="text/css" />'); 

这个内容被插入到DOM中,然后正常渲染,在这种情况下导致外部样式表的获取。

但是请注意cletus的回答,因为如果你对静态内容的dynamic加载不够小心,最终可能会导致页面加载时间过长和资源转移过度。

一般来说,如果你正确地做到了这一点,你最好只包括所有你需要的东西。

我的意思是静态内容(图像,Javascript,CSS)的最佳实践是:

  • 尽量减less外部HTTP请求(最小化文件数量);
  • 版本的文件,并使用远期期货过期头;
  • 根据需要缩小和压缩内容。

所以用户只会下载给定的文件一次,直到它改变。

dynamic加载CSS和Javascript,除非特别大,通常是没有根据的,适得其反。

IE问题…

我正在用IE 6,7,8崩溃

 $('head').append( $('<link rel="stylesheet" type="text/css" />').attr('href', 'assets/css/jquery.fancybox-1.3.4.css') ); 

只是复制到主表,以避免另一个http请求,瞧。