当前位置: 首页 > 面试题库 >

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

锺离卓
2023-03-14
问题内容

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

.highlight { 
    color: red; 
}

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

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

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

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

有什么建议么?


问题答案:

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

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

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

我只在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) {

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



 类似资料:
  • 我想知道是下拉的内容菜单显示还是没有。如果菜单显示无,我想点击它。并在被阻止时保持原样。属性值是这样的: div id=“section_content_23”class=“thread-content”style=“display:none;”我的xpath标题类似于ex'section_title_23'。我只想知道样式是“display:none;”或style=“display:block

  • 问题内容: 我想: 查找页面中所有元素的样式属性(例如:具有的所有元素) 更改所有属性(例如从到)。 您对此有何建议? 问题答案: 我的建议是尽可能避免这样做。而是使用类来分配颜色值,然后可以使用该类而不是颜色值来查找元素。 据我所知,没有可用于查询 特定 样式值的选择器(即使在CSS3中也是如此),这意味着循环遍历所有元素(或者看起来可以将其限制为具有属性的所有元素)并看着财产。现在,问题是,即

  • 问题内容: 如果样式所引用的元素尚未生成,是否可以从页面的外部CSS获取值?(该元素将动态生成)。 我见过的jQuery方法是,但这依赖于页面上。有没有办法找出CSS中属性设置为什么,而不是元素的计算样式? 我是否需要做一些丑陋的事情,例如在页面上添加元素的隐藏副本,以便可以访问其样式属性? 问题答案: 使用jQuery: 直接使用DOM: 注意: 在这两种情况下,如果要加载外部样式表,都将等待它

  • 问题内容: 我有些不清楚的地方: 1)如果只有一种颜色,并且每侧相同,就不可能直接获得div的全局边框颜色: 而不是做: 要么 要么 … 2)在CSS文件中具有样式属性时,只能通过getComputedStyle方法访问它们,而不能通过样式属性(如内联定义的样式属性)或通过div中的样式属性来访问,对吗? 这是行不通的。 3)如果要设置样式属性,则必须使用元素的样式属性,是否无法使用计算出的样式对

  • 问题内容: 我已经编写了一个枚举类,我想按类型获取属性或按属性获取类型,但这似乎是不可能的。 上面的代码将无法编译。如何上班? 问题答案: 您需要做的就是添加一个默认情况,以便该方法始终返回某些内容或引发异常: 也许更好

  • 问题内容: 我有这样的事情: 我正在使用beautifulsoup解析html。有没有办法拉出“背景” css属性中的“ URL”? 问题答案: 您有两种选择-快速,肮脏或正确的方法。快速而肮脏的方式(如果更改标记,则很容易中断)看起来像 显然,您必须使用它才能使其与多个标签一起使用。 正确的方法是,建议有人在CSS字符串上使用正则表达式:)会很糟糕,因此使用CSS解析器。cssutils是我刚刚