2011-11-20 52 views

回答

3

你可以做這樣的事情:

var myDiv = $("#myId"); 
alert('initial height from css is: ' + myDiv.css("height")); 

myDiv.css("height","50px"); 
alert('height modified by js is: ' + myDiv.css("height")); 

// store modified height value 
var height = myDiv.css("height"); 

// set height to an invalid value 
myDiv.css("height",""); 

alert('height is now retrieved from css again: ' + myDiv.css("height")); 

// restore height value 
myDiv.css("height",height); 

我創建了一個jsfiddle.net例如,您可以查看它here

+0

謝謝。看起來你正在創建一個臨時元素,然後閱讀它的屬性 - 所以直接從樣式表中讀取是不可能的? –

+1

這個例子不是創建一個新的元素;它首先保存計算的高度值,重置元素的高度樣式,以便它取得css值並在修改之前將該值恢復到其值。你爲什麼不想創建一個新的元素?因爲這個解決方案很可能會在執行過程中引起顯示器的一些變化,從用戶體驗的角度來看這不會是好事。 – melihcelik

+0

我想避免創建一個新元素,因爲當我想要做的是從樣式表中讀取一個值時,它改變DOM時效率低下。但它看起來像我必須。我不能快速調整原始元素的大小:它是遊戲中的角色,當它的腳離開屏幕時,我會縮小DIV,否則頁面會調整大小,並且看起來不對。 –

1

不,你不能讀取CSS的任何屬性。

您可以創建一些後端API,允許您直接從JavaScript更改CSS文件,而不是將更改height的CSS文件,而不是將style應用於元素。

+1

如果我正確地解釋這一點,他詢問如何使用JavaScript來讀取一個樣式屬性在樣式表中聲明,而不是它可能已經被其他腳本改變現有元素的計算樣式。 – BoltClock

+0

你的意思是服務器端?我正在創建一個可以離線運行的簡單遊戲(人們可以在線玩或購買文件並在本地運行),因此服務器代碼不是一種選擇。 –

2

這是可能的,前提是高度變化是由已知病因啓動。

首先,保存當前在線的高度/類名。然後,重置類/高度屬性。然後,使用window.getComputedStyle方法讀取當前高度。最後,恢復類/高度屬性。我們假設不必刪除類名,因爲只有通過設置內聯height屬性才能更改高度。然後:

function getCSSheight(elem) { 
    var style = window.getComputedStyle(elem, null); 
    return style.getPropertyValue("height"); //Returns 222px; 
    // Optionally: Use parseFloat to convert the `22px` to `22`. 
} 
+0

這是否意味着我必須重置高度,即使只是幾分之一秒?我的DIV對象靠近固定大小屏幕的底部。我減少他們的高度,以避免強制屏幕調整大小。即使是臨時調整到全高也會導致問題。 –

相關問題