加載文檔之前,所以我不能添加元素的DOM
如果不能追加到document.head那麼你可以做的難看document.write('<link rel="stylesheet" ...
。但是據我所知,這不是隻要你附加到document.head一個問題 - 這就是我們在我們的框架做:
<script>
(function(){
var s='blueskin';
var link=document.createElement('link');
var h=document.getElementsByTagName('head')[0];
link.type='text/css';
link.rel='stylesheet';
link.href='/skins/'+s+'.css';
h&&h.appendChild(link);
})();
</script>
動態地添加樣式表的外部CSS文件:
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.type = 'text/css';
link.href = 'http://example.com/stylesheet.css';
document.head.appendChild(link);
如果您有CSS作爲一個字符串,那麼你可以使用動態添加style
元素(這適用於我使用所有的瀏覽器,我覺得這個這個工程的歌劇,但我最近沒有嘗試過):
var styleElement = document.createElement('style');
styleElement.type = 'text/css';
styleElement.rel = 'stylesheet';
setCss(styleElement, css);
document.head.appendChild(styleElement);
function setCss(styleElement, css) {
if (styleElement.styleSheet) { // IE
styleElement.styleSheet.cssText = css || '';
} else {
var firstChild = styleElement.firstChild;
firstChild && styleElement.removeChild(firstChild);
var textnode = document.createTextNode(css || '');
styleElement.appendChild(textnode);
}
}
如果您想做更復雜的事情,cssFx項目會動態修復用於歌劇的<link rel="stylesheet"
元素的CSS。
如果您不想添加到document.head,那麼您也可以將子樣式表添加到現有的樣式表(相當於@import
),儘管我沒有爲此添加代碼片段。
最後,如果樣式表需要進入正文,那麼您將不得不使用onload或jQuery $(myReadyFn);事件處理程序。
我希望這有助於位:http://dev.opera.com/articles/view/dynamic-style-css-javascript/ –
只是好奇:爲什麼一個新的框架? –
@Diodeus這是一個很好的基礎教程,但遺憾的是它仍然依賴於DOM的可用性。 – MaxArt