我可以根据要求加载外部样式表吗?
$.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或以下版本,您需要:
- 在设置
href
之前附加<link>
要么 - 使用IE的
document.createStyleSheet()
方法
另外,检查链接是否已经被添加在所有浏览器中都不可靠地工作。
我也会质疑你的部分前提:
我想避免加载灯箱的JS和CSS文件,除非用户要求。
为什么? 减less页面重量? 我可以理解这个愿望,但是你应该测量你的CSS和JS文件的大小(在缩小和压缩之后),并且不要看看这个缩放值是否值得:
- 加载按需加载的复杂性; 和
- 灯箱的响应能力略有下降(因为按需加载时,灯箱将不得不等待自己的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请求,瞧。