元素的CSS樣式,除了包括內聯的(即透過style屬性加上的)樣式定義外,還有頁面嵌入的css和外部引入的css兩種方式。但在JS中透過el.style.xxx只能取得的內聯的樣式屬性,這就存在比較大的限制。還好瀏覽器都提供了另外的方式來取得以其它方式定義的樣式屬性,在IE中有currentStyle、FF等w3c標準的瀏覽器中有getComputedStyle。
為方便操作,現在的許多js-lib中都對此做了封裝,但很多時候我們並不需要引入什麼lib,我們需要的只是一個getStyle函數來取得元素的目前樣式定義。參考了幾個JS-Lib的程式碼,決定實作一個簡化版的getStyle函數。此函數目標為:滿足大多數需求、跨瀏覽器、程式碼簡潔、效能優良。本著這幾點要求,本人花了一個小時的時間才搞定,主要利用了“JS邏輯運算符特性、代碼"編譯",函數的即時執行”幾個小技巧,寫到這裡,以備以後使用,如果能對哪位朋友有幫助,當然更好。
程式碼
var getStyle=function(){
var f=document.defaultView;
return new Function('el','style',[
"style.indexOf('-')>-1 && (style=style.replace(/-( \w)/g,function(m,a){return a.toUpperCase()}));",
"style=='float' && (style='",
f ? 'cssFloat' : 'styleFloat',
"');return el.style[style] || ",
f ? 'window.getComputedStyle(el, null)[style]' : 'el.currentStyle[style]',
' || null;'].join(''));
}();
//使用範例:
var el=document.getElementById('test');
getStyle(el,'line-height');
getStyle(el,'color');
getStyle(el,'float');
From: http://www.ajaxbbs.net/post/webFront/JS-Get-Style-Function.html