你可以尝试使用非标准的 IE element.currentStyle
属性,或者寻找标准的 DOM Level 2 中的 getComputedStyle
方法(如果可用):
function getStyle(el,styleProp) {
var camelize = function (str) {
return str.replace(/\-(\w)/g, function(str, letter){
return letter.toUpperCase();
});
};
if (el.currentStyle) {
return el.currentStyle[camelize(styleProp)];
} else if (document.defaultView && document.defaultView.getComputedStyle) {
return document.defaultView.getComputedStyle(el,null)
.getPropertyValue(styleProp);
} else {
return el.style[camelize(styleProp)];
}
}
使用方法:
var element = document.getElementById('elementId');
getStyle(element, 'font-size');
更多信息:
编辑:感谢@Crescent Fresh,@kangax和@Pekka的评论。
变更:
camelize
函数,因为包含连字符的属性,如font-size
,必须在currentStyle
IE对象上以驼峰命名方式访问(例如:fontSize
)。getComputedStyle
之前检查document.defaultView
是否存在。el.currentStyle
和getComputedStyle
不可用时,通过element.style
获取内联CSS属性的最后一种情况。currentStyle
和 getComputedStyle
本质上是不同的:http://erik.eae.net/archives/2007/07/27/18.54.15/ getComputedStyle
无法获取继承的样式,而总是将其计算为 px
,无论该值是否被声明为 px
。 - Crescent Freshdocument.defaultView.getComputedStyle
而非window.getComputedStyle
(MDC的错误,或仅考虑了其自己 - Mozilla的实现)。getComputedStyle
被指定为AbstractView
的成员,而document.defaultView
实现了它,并不能保证window == document.defaultView
(无论是在规范中还是在实践中都不是这样,实际上Safari 2.x就是window!= document.defaultView
的一个很好的例子)。有趣的是,您链接到的getstyles文章中的PPK也犯了类似的错误(在window
上测试defaultView
)。 - kangaxcurrentStyle
只接受驼峰式属性(例如fontSize),而getPropertyValue
则使用原始形式(font-size)。 - PekkagetComputedStyle
之前,检查document.defaultView
的存在也是一个好主意。 - kangax看起来 jQuery (至少1.9版本) 在使用 $('#element')[.css][1]('fontSize')
时,本身就使用了 getComputedStyle()
或 currentStyle
。因此,如果您使用jQuery,则不需要烦恼更复杂的解决方案。
在IE 7-10,火狐和谷歌浏览器中测试通过。
$('mySelector').css('font-size')
- Stephan function getFontSize(element){
var size = computedStyle(element, 'font-size');
if(size.indexOf('em') > -1){
var defFont = computedStyle(document.body, 'font-size');
if(defFont.indexOf('pt') > -1){
defFont = Math.round(parseInt(defFont)*96/72);
}else{
defFont = parseInt(defFont);
}
size = Math.round(defFont * parseFloat(size));
}
else if(size.indexOf('pt') > -1){
size = Math.round(parseInt(size)*96/72)
}
return parseInt(size);
}
function computedStyle(element, property){
var s = false;
if(element.currentStyle){
var p = property.split('-');
var str = new String('');
for(i in p){
str += (i > 0)?(p[i].substr(0, 1).toUpperCase() + p[i].substr(1)):p[i];
}
s = element.currentStyle[str];
}else if(window.getComputedStyle){
s = window.getComputedStyle(element, null).getPropertyValue(property);
}
return s;
}
pt
、em
等单位会很难处理,只有IE的currentStyle
可以正确获取它们。 - Crescent Fresh