獲取元素當(dāng)前樣式
getStyle(obj, styleName)
寫這篇文章的目的是為了拿到當(dāng)前元素的現(xiàn)有的樣式技掏,直接的element.style只能拿到行內(nèi)樣式,無法拿到渲染完成結(jié)果的樣式悯搔,所以用這么一個(gè)小方法來實(shí)現(xiàn)
DOM標(biāo)準(zhǔn)里有一個(gè)全局方法getComputedStyle,這個(gè)方法可以獲取當(dāng)前對象的全部樣式(包括通過class屬性飲用的外部樣式表帶入的樣式等等非行內(nèi)樣式),使用方法如:getComputedStyle(obj,null).width趋箩,拿到的就是obj的width(結(jié)果是字符串,如:'100px'加派,哪怕你給的是em阁簸,輸出的結(jié)果依然是px單位的)。
但事情遠(yuǎn)沒有這么簡單哼丈,畢竟我們是生活在有IE的世界里启妹,所以IE有另外一個(gè)自己的方法,就是currentStyle醉旦,不同于全局方法getComputedStyle饶米,它是作為DOM元素屬性存在的,也就是說车胡,同樣是拿寬度檬输,使用方法是:obj.currentStyle.width(IE里如果用的是em的話那么出來的結(jié)果也是em的)。
為了保證兼容性匈棘,所以要寫:
obj.currentStyle || getComputedStyle(obj,null)
這樣就能獲取到對象的現(xiàn)有樣式表丧慈,是個(gè)大對象,但是屬性名是駝峰的,在float屬性上逃默,F(xiàn)F瀏覽器是cssFloat鹃愤,而IE7是styleFloat,IE9是兩個(gè)都可能有完域,這樣的兼容性就不好調(diào)了软吐,但是我們還有一個(gè)方法,就是getPropertyValue吟税,可以直接寫屬性名凹耙,這個(gè)方法IE9+以上都支持。
不過既然說了是IE9+肠仪,那么678我們不能不管啊肖抱,678還有一個(gè)方法,就是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匹涮。