【问题标题】:Can I put a CSS class into an object?我可以将 CSS 类放入对象中吗?
【发布时间】:2013-06-27 22:50:05
【问题描述】:

我在一个 CSS 文件中有这个:

.name-search 
{
border: 2px solid blue;
border-radius: 5px;
}

我想要一个函数来创建一个简单的 JavaScript 映射。

所以对于上面的 CSS 类,

var x = getCSSMap("name-search");

相当于

var x = {"border": "2px solid blue", "border-radius": "5px"};

有什么东西可以做到这一点吗?

【问题讨论】:

标签: javascript css


【解决方案1】:

document.styleSheets 是页面上所有样式表的数组。

要获取页面上第一个样式表的第一条规则,您可以使用:

document.styleSheets[0].cssRules[0]

文档http://www.javascriptkit.com/domref/stylesheet.shtml

【讨论】:

  • 这很奇怪。它告诉我 document.styleSheets[0] 是一个对象,它对我的​​ css 文件具有正确的href,其中包含在我的页面上成功应用的两个规则,但是 document.styleSheets[0].cssRules 和 document.styleSheets[0 ].rules 为空。
  • 啊,是chrome的问题。
【解决方案2】:

如果没有找到精确选择器,则搜索精确选择器将返回 null,或者以 css 样式作为属性名称的对象,camelcased 用于对象表示法,标准名称用于数组表示法。 需要调整以允许多个选择器等。

扫描document.styleSheets 的选择器

用法:

var cssobj = css2Obj(".MyStyle");
console.log( cssobj["font-size"] );
console.log( cssobj.fontSize );

代码

function cssCamelCase(name) {
    var parts = name.split("-");
    if( parts.length < 2 )
        return name;
    for(var i=1; i<parts.length;i++) {
        parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1)
    }
    return parts.join("");
}
function css2Obj(selector) {
   var cssobj = null;
   for(var i=0; i<document.styleSheets.length; i++) {
    if( document.styleSheets[i].cssRules !== null ) {
        var sheet=document.styleSheets[i];
        for(var b=0; b<sheet.cssRules.length; b++) {
            var rule = sheet.cssRules[b];
            if( rule.selectorText == selector ) {
                var style = rule.style;
                if(cssobj === null) 
                    cssobj={};
                for(var c=0; c<style.length; c++) {
                    cssobj[style[c]] = style[cssCamelCase(style[c])];
                    cssobj[cssCamelCase(style[c])] = style[cssCamelCase(style[c])];
                }
            }
        }
    }
   }
   return cssobj;
}

【讨论】:

  • 在控制台的这个页面上测试很容易。 css2Obj('pre') =&gt; null。但是 all.css 中定义了许多规则。
  • 是的,不幸的是,看起来只有来自同一域的 css 文件被加载到documents.styleSheets中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2022-06-10
相关资源
最近更新 更多