获取元素当前样式
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。