2013-06-30 48 views
3

我有这样的一个CSS文件:我可以把一个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"}; 

有什么在那里,做到这一点?

+2

请看看这些问题,看看他们是否解决你的问题:http://stackoverflow.com/questions/754607/can-jquery-get-all-css-styles-associated-with-an-element和http:// stackoverflow。 COM /问题/ 4781410/jQuery的如何对获得,所有的样式 - CSS定义 - 内 - 内 - 外的文档-W。他们非常精细,我记得使用了其中的一种解决方案。 – Matyas

+0

很多^与DzikiMarian的答案。 –

+0

我不确定“获取节点的样式”方法将执行OP所需的操作,因为其他样式也可能适用。 – nrabinowitz

回答

4

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

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

document.styleSheets[0].cssRules[0] 

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

+0

这很奇怪。它告诉我document.styleSheets [0]是一个对象,它对我的​​css文件有正确的href,它包含两个在我的页面上成功应用的规则,但document.styleSheets [0] .cssRules和document.styleSheets [0 ] .rules为空。 –

+0

啊,这是一个铬合金问题。 –

3

搜索,如果没有找到确切的选择将返回null或对象与CSS样式作为属性名称,用于对象表示法,用于数组表示法的标准名称。 需求调整了允许多个选择等

扫描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; 
} 
+0

在控制台的这个页面上测试很容易。 'css2Obj('pre')=> null'。但是在all.css中定义了很多规则。 – dfsq

+0

是的不幸的是,它看起来像只有来自同一个域的css文件被加载到documents.styleSheets –

相关问题