轉者語:
今天看jQuery原始碼CSS部分,裡面用到了currentStyle和getComputedStyle來獲取外部樣式。
因為elem.style.width只能獲取elem的style屬性裡的樣式,無法獲取外部css檔案中定義的樣式,所以針對IE8以下以及其他瀏覽器,需要以這兩種不同的方式獲取外部css樣式,即currentStyle和getComputedStyle。
下面這篇文章講的不錯,也比較好理解,言簡意賅,在此推薦以下。
樣式表有三種方式:
內嵌樣式(inline Style) :是寫在Tag裡面的,內嵌樣式只對所有的Tag有效。 (也稱作“內聯樣式”)
內部樣式(internal Style Sheet):是寫在HTML的裡面的,內部樣式只對所在的網頁有效。
外部樣式表(External Style Sheet):如果很多網頁需要用到同樣的樣式(Styles),將樣式(Styles)寫在一個以.css為字尾的CSS檔案裡,然後在每個需要用到這些樣式(Styles)的網頁裡引用這個CSS檔案。 最常用的是style屬性,在JavaScript中,通過document.getElementById(id).style.XXX就可以獲取到XXX的值,但意外的是,這樣做只能取到通過內嵌方式設定的樣式值,即style屬性裡面設定的值。
解決方案:引入currentStyle,runtimeStyle,getComputedStyle style 標準的樣式,可能是由style屬性指定的!
runtimeStyle 執行時的樣式!如果與style的屬性重疊,將覆蓋style的屬性!
currentStyle 指 style 和 runtimeStyle 的結合! 通過currentStyle就可以獲取到通過內聯或外部引用的CSS樣式的值了(僅限IE) 如:document.getElementById("test").currentStyle.top
要相容FF,就得需要getComputedStyle 出馬了
注意: getComputedStyle是firefox中的, currentStyle是ie中的. 比如說
<style> #mydiv { width : 300px; } </style>
則:
var mydiv = document.getElementById('mydiv'); if(mydiv.currentStyle) { var width = mydiv.currentStyle['width']; alert('ie:' + width); } else if(window.getComputedStyle) { var width = window.getComputedStyle(mydiv , null)['width']; alert('firefox:' + width); }
另外在FF下還可以通過下面的方式獲取
document.defaultView.getComputedStyle(mydiv,null).width; window.getComputedStyle(mydiv , null).width;