我一直在使用来自Pro JavaScript Techniques的John Resig的getStyle
函数来获得元素的风格:
function getStyle(elem, name) {
// J/S Pro Techniques p136
if (elem.style[name]) {
return elem.style[name];
} else if (elem.currentStyle) {
return elem.currentStyle[name];
}
else if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g, "-$1");
name = name.toLowerCase();
s = document.defaultView.getComputedStyle(elem, "");
return s && s.getPropertyValue(name);
} else {
return null;
}
}
但是,如果未指定样式,此方法将返回元素的默认样式:
http://johnboxall.github.com/test/getStyle.html
alt text http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png
是否可以仅获取元素的样式表指定样式(如果未定义样式,则返回null)?
更新
为什么我需要这样的野兽?我正在构建一个允许用户设置元素样式的小组件。其中一种可以应用的样式是text-align
- left
,center
,right
- 使用getStyle
无样式元素默认为center
。这使得无法判断元素是否居中,因为用户希望它居中或居中,因为这是默认样式。
答案 0 :(得分:5)
是否有可能只得到 样式表指定的样式 element(如果是样式,则返回null 未定义)?
这实际上就是你所呈现的例行所做的事情。问题是,在大多数情况下,大多数样式不未定义 - 它们是由各个浏览器的内部样式表继承和/或定义的。
您可以花费大量精力,在当前视图中的样式表的 all 中,遍历所有定义相关样式的规则。文档,为有问题的元素评估它们,如果没有应用...并且如果没有应用于父级(或者不继承此特定样式)...则认为它未定义。这将是缓慢的,并且难以置信容易出错。我不建议尝试。
也许你会更好地退后一步,问为什么你会需要这样的东西?
答案 1 :(得分:2)
也许你的组件可以包装它控制的样式?然后,当通过组件设置样式时,组件知道用户想要什么。