2012-02-09 106 views
-1

任何人都可以告訴我這段JS的問題是什麼?我試圖將'容器的margin-top'的值賦給m變量。獲取CSS元素的價值

function test() 
{ 
    var e = document.getElementById('container'); 
    var m = e.style.getPropertyValue("marginTop"); 
    alert (m);   
} 

編輯:警報是爲了顯示m的

+0

是價值明確定義? – Christophe 2012-02-09 18:56:26

+0

這個'alert('hi')'與這個問題有關嗎?! – gdoron 2012-02-09 18:57:26

+0

抱歉,我的意思是:alert(m); – james 2012-02-09 18:59:05

回答

0

值試試這個:

function getStyle(elment, style) { 
    var x = document.getElementById(element); 

    if (x.currentStyle) { 
     var y = x.currentStyle[style]; 
    } else if (window.getComputedStyle) { 
     var y = document.defaultView.getComputedStyle(x, null).getPropertyValue(style); 
    } 

    return y; 
} 

function test() { 
    var m = getStyle('container', 'margin-top'); 
    alert(m); 
} 

另外,要小心你的變量範圍。 m將不會被定義在test()之外。

+0

謝謝,不過警告消息顯示爲空白 – james 2012-02-09 19:00:45

+0

這就是我所害怕的。 'marginTop'僅在明確設置了「margin-top」的情況下定義。試試這個新版本。 – Blender 2012-02-09 19:48:40

+0

我無法證實你的假設。這更可能與計算風格有關。 'style'屬性只能訪問內聯樣式。 – PointedEars 2012-02-09 20:11:20

0

您可以嘗試使用這個簡單的功能:

function test() 
{ 
    var e = document.getElementById('container'); 
    var m = getStyle(e, "marginTop"); 
    alert ('hi ' + m);  
} 

function getStyle(el,styleProp) 
{ 
    if (el.currentStyle) 
     var y = el.currentStyle[styleProp]; 
    else if (window.getComputedStyle) 
     var y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp); 
    else 
     var y = el.style[styleProp]; 
    return y; 
} 
+0

這太簡單了。 'getPropertyValue()'只支持帶連字符的屬性名稱,它應該是'document.defaultView.getComputedStyle'(以及更復雜的功能測試)以支持Safari WebKit。 – PointedEars 2012-02-11 13:57:28