我一直使用从JavaScript的专业技术约翰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

替代文字http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png

是否有可能得到的只有指定的样式风格的元素(和返回null如果样式为undefined)?

更新

为什么需要这样一个东西?我建立一个小部件,允许用户风格元素。一个可应用的样式是text-align - leftcenterright - 使用getStyle无样式元素默认center。这使得它无法告诉元素是否为中心,因为用户希望它为中心或居中,因为这是默认样式。

有帮助吗?

解决方案

  

是否有可能只得到   样式表中指定样式的   元素(如果风格返回null   未定义)?

这是有效的什么是你目前的程序进行。问题是,在大多数情况下,大部分款式都是的的不确定 - 他们继承和/或由各个浏览器的内部样式表中定义。

您可以,有一大堆的努力,遍历的所有的界定问题的风格,在所有的样式表中的当前视图的规则文档,评估他们对有问题的元素,如果没有应用......如果没有应用到父(或这个特殊的风格是不能继承)...然后再考虑它不确定的。这将是缓慢的,并且难以置信容易出错。我不建议尝试它。

也许你会做的更好退一步,问你为什么会需要这样的事?

其他提示

也许你的组件可以包装它控制的样式?然后,当样式是通过组件设置组件知道用户想要什么。

scroll top