2012-04-28 64 views
3

如何訪問使用外部或嵌入樣式表指定的元素的樣式聲明。例如:如何訪問使用ID選擇器在嵌入樣式表中定義的元素的width屬性。 我知道CSSRules對象可以做到這一點......但它是依賴於瀏覽器的。例如:在Chrome中,對象爲空...那麼,瀏覽器獨立的方式是什麼?使用javascript訪問CSS類

+0

要清楚:你試圖訪問適用於該元素的規則,還是試圖找出適用於特定元素的最終樣式? – Phrogz 2012-04-28 14:58:54

回答

2

這確實是依賴於瀏覽器...我有一些代碼,我用它來創建一個自動擴展文本區域,改編自發現的代碼there

注意,這裏的$功能是從Prototype

function getStyleFromCss(el, style) { 
    /* Hack required by IE */ 
    var value = $(el).getStyle(style); 
    if (!value) { 
     /* For other browsers. Actually this equals 'window'. Use that 
     * if Opera fails on you. */ 
     if(document.defaultView) { 
      value = document.defaultView.getComputedStyle(el, null). 
       getPropertyValue(style); 
      // for IE 
     } else if(el.currentStyle) { 
      value = el.currentStyle[style]; 
     } 
    } 
    if(value.length > 0){ 
     /* if the value returned has the word px in it, we check for 
     * the letter x */ 
     if (value.charAt(value.length-1) == "x") { 
      value = parseInt(value.substring(0, value.length-2)); 
     } 
    } 
    return value; 
} 

從原型的getStyle()函數定義這種方式,你應該能夠很容易地使其適應您的需求。

getStyle: function(element, style) { 
    element = $(element); 
    style = style == 'float' ? 'cssFloat' : style.camelize(); 
    var value = element.style[style]; 
    if (!value || value == 'auto') { 
    var css = document.defaultView.getComputedStyle(element, null); 
    value = css ? css[style] : null; 
    } 
    if (style == 'opacity') return value ? parseFloat(value) : 1.0; 
    return value == 'auto' ? null : value; 
}, 
+0

您不包含'$()'或'getStyle()'或'getPropertyValue()'的代碼。如何使用這個從普通的JavaScript? – jfriend00 2012-04-28 14:30:23

+0

我給出了getStyle的定義。 getPropertyValue()是DOM的東西。 – ddaa 2012-04-28 14:31:25

+0

行..感謝代碼... – 2012-04-28 21:29:03

2

這是IE9之前和所有其他瀏覽器做不同的情況。要獲得包括無論是應用於從樣式表對象的對象對當前的風格,你可以使用這樣的事情:

function getStyle(el, cssprop) { 
    if (document.defaultView && document.defaultView.getComputedStyle) 
     return document.defaultView.getComputedStyle(el, null)[cssprop]; 
    else //IE 
     return el.currentStyle[cssprop]; 
} 
+0

只是一個問題:是否需要document.defaultView(第一次看到它)?其他選項而不是defaultView? – 2012-04-28 14:32:38

+0

謝謝。如果你刪除了你的第二個人,我會提高你的答案。 – 2012-04-28 14:38:22

+0

@ BenniKa - 我糾正了它。 – jfriend00 2012-04-28 14:47:47