獲取元素當前樣式
getStyle(obj, styleName)
寫這篇文章的目的是為了拿到當前元素的現有的樣式,直接的element.style只能拿到行內樣式,無法拿到渲染完成結果的樣式,所以用這么一個小方法來實現
DOM標準里有一個全局方法getComputedStyle,這個方法可以獲取當前對象的全部樣式(包括通過class屬性飲用的外部樣式表帶入的樣式等等非行內樣式),使用方法如:getComputedStyle(obj,null).width,拿到的就是obj的width(結果是字符串,如:'100px',哪怕你給的是em,輸出的結果依然是px單位的)。
但事情遠沒有這么簡單,畢竟我們是生活在有IE的世界里,所以IE有另外一個自己的方法,就是currentStyle,不同于全局方法getComputedStyle,它是作為DOM元素屬性存在的,也就是說,同樣是拿寬度,使用方法是:obj.currentStyle.width(IE里如果用的是em的話那么出來的結果也是em的)。
為了保證兼容性,所以要寫:
obj.currentStyle || getComputedStyle(obj,null)
這樣就能獲取到對象的現有樣式表,是個大對象,但是屬性名是駝峰的,在float屬性上,FF瀏覽器是cssFloat,而IE7是styleFloat,IE9是兩個都可能有,這樣的兼容性就不好調了,但是我們還有一個方法,就是getPropertyValue,可以直接寫屬性名,這個方法IE9+以上都支持。
不過既然說了是IE9+,那么678我們不能不管啊,678還有一個方法,就是getAttrbute方法,getAttrbute方法提供了和getPropertyValue方法類似的功能,用法還與getPropertyValue類似。不過IE6依然是駝峰寫法,如果你拋棄了IE6,那么新世界大門就打開了。
最終的封裝方法就是這樣了:
function getStyle(obj, styleName) {
var oStyle = obj.currentStyle ? obj.currentStyle : window.getComputedStyle(obj, null);
if (oStyle.getPropertyValue) {
return oStyle.getPropertyValue(styleName);
} else {
return oStyle.getAttrbute(styleName);
}
}
此方法不支持IE6。