一尘不染

在JavaScript中获取元素样式表样式

css

我一直在使用getStylePro JavaScript Techniques的John Resig 函数来获取元素的样式:

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


阅读 277

收藏
2020-05-16

共1个答案

一尘不染

是否可以仅获取样式表指定的元素样式(如果样式未定义,则返回null)?

这实际上就是您所提供的例程所完成的。问题是,在大多数情况下,大多数样式 不是 未定义的-它们是由各个浏览器的内部样式表继承和/或定义的。

您可以花费大量的精力来遍历定义当前样式的 所有 规则,在文档当前视图中的 所有
样式表中,针对存在问题的元素对其进行评估,如果没有适用的话…并且如果没有应用于父项(或不继承此特定样式)…则认为它未定义。这将是缓慢的,
令人难以置信的 容易出错。我不建议尝试。

也许您最好退后一步,然后问您为什么会需要这样的东西?

2020-05-16