Skip to content

Instantly share code, notes, and snippets.

@Takazudo
Created March 31, 2011 16:09
Show Gist options
  • Save Takazudo/896667 to your computer and use it in GitHub Desktop.
Save Takazudo/896667 to your computer and use it in GitHub Desktop.
jquery.requreCss.js
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>jQuery.requireCss</title>
<meta name="description" content="">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script src="jquery.requreCss.js"></script>
<script>
/* use like this */
$.requireCss('style1.css', 'all');
$.requireCss('style2.css');
$.requireCss('style3.css');
$.requireCss('style4.css');
/* more requests to each css are ignored. */
$.requireCss('style2.css');
$.requireCss('style3.css');
$.requireCss('style2.css');
$.requireCss('style2.css');
$.requireCss('style3.css');
</script>
</head>
<body>
<h1>jQuery.requireCss</h1>
<p><button onclick="$.requireCss('style5.css');">$.requireCss('style5.css');</button></p>
<div id="div1">#div1</div>
<div id="div2">#div2</div>
<div id="div3">#div3</div>
<div id="div4">#div4</div>
<div id="div5">#div5</div>
</body>
</html>
/*!
* $.requireCss
* https://gist.github.com/896667
* is a stylesheet loader
* author: Takeshi Takatsudo (takazudo[at]gmail.com)
* upate: 2011/04/01
* version: 1
*/
(function($, undefined){
/* elements */
var $head = $('head');
/* css preest collection */
var collection = (function(){
var o = {};
var _presets = [];
o.register = function(preset){
if(o.has(preset)){
return o;
}
_presets.push(preset);
return o;
};
o.has = function(preset){
return $.grep(_presets, function(current){
return (current.href === preset.href) && (current.media === preset.media);
}).length ? true : false;
};
return o;
})();
/* public */
$.requireCss = function(href, media){
media = media || 'all';
var preset = {
href: href,
media: media
};
if(collection.has(preset)){
return $;
}
var link = document.createElement('link');
link.type = "text/css";
link.rel = "stylesheet";
link.href = href;
link.media = media;
$head[0].appendChild(link);
return $;
};
})(jQuery); // end of encapsulation
#div1{ border:3px solid red; }
#div2{ border:3px solid orange; }
#div3{ border:3px solid blue; }
#div4{ border:3px solid purple; }
#div5{ border:3px solid navy; }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment