我一直在使用getStylePro 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; } }
是否可以仅获取样式表指定的元素样式(如果样式未定义,则返回null)?
更新:
为什么我需要这样的野兽?我正在构建一个允许用户设置元素样式的小组件。一个可应用的样式是text-align- ,,left -使用无样式元素默认。这使得无法确定元素是居中还是因为用户希望居中,还是因为这是默认样式而居中。center``right``getStyle``center
text-align
left
center``right``getStyle``center
这实际上就是您所提供的例程所完成的。问题是,在大多数情况下,大多数样式 不是 未定义的-它们是由各个浏览器的内部样式表继承和/或定义的。
您可以花费大量的精力来遍历定义当前样式的 所有 规则,在文档当前视图中的 所有 样式表中,针对存在问题的元素对其进行评估,如果没有适用的话…并且如果没有应用于父项(或不继承此特定样式)…则认为它未定义。这将是缓慢的, 令人难以置信的 容易出错。我不建议尝试。
也许您最好退后一步,然后问您为什么会需要这样的东西?