2013-06-30 45 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 –

相關問題