小编典典

如何通过javascript / jQuery从CSS类获取样式属性?

javascript

如何通过jQuery从CSS类访问属性?我有一个CSS类,如:

.highlight { 
    color: red; 
}

我需要对一个对象进行彩色动画处理:

$(this).animate({
    color: [color of highlight class]
}, 750);

这样我就可以从CSS 更改为redblue并且动画将按照CSS进行工作。

一种方法是在highlight类中放置一个不可见的元素,然后获取要在动画中使用的元素的颜色,但是我想这是非常非常糟糕的做法。

有什么建议么?


阅读 312

收藏
2020-05-01

共1个答案

小编典典

我编写了一个小函数,该函数遍历文档上的样式表以查找匹配的选择器,然后查找样式。

需要注意的是,这仅适用于使用样式标签定义的样式表或同一域中的外部表。

如果知道工作表,则可以将其传递进来,从而不必再查看多个工作表(更快,并且如果您有冲突规则,则更为准确)。

我只在jsFiddle上测试了一些较弱的测试用例,请让我知道这是否适合您。

function getStyleRuleValue(style, selector, sheet) {
    var sheets = typeof sheet !== 'undefined' ? [sheet] : document.styleSheets;
    for (var i = 0, l = sheets.length; i < l; i++) {
        var sheet = sheets[i];
        if( !sheet.cssRules ) { continue; }
        for (var j = 0, k = sheet.cssRules.length; j < k; j++) {
            var rule = sheet.cssRules[j];
            if (rule.selectorText && rule.selectorText.split(',').indexOf(selector) !== -1) {
                return rule.style[style];
            }
        }
    }
    return null;
}

用法示例:

var color = getStyleRuleValue('color', '.foo'); // searches all sheets for the first .foo rule and returns the set color style.

var color = getStyleRuleValue('color', '.foo', document.styleSheets[2]);

编辑:

我忽略了考虑分组规则。我将选择器检查更改为此:

if (rule.selectorText.split(',').indexOf(selector) !== -1) {

现在它将检查分组规则中的任何选择器是否匹配。

2020-05-01