我想要計算一個隱藏父元素的寬度。因爲元素不可見,所以它返回一個零寬度。所以我寫了這個小函數:如何僅使用jQuery從內聯樣式獲取css屬性?
/**
* Compute the width of an element if it were to be visible.
*
* $element: The element you want to compute the width of
* $hiddenParent: A parent (ancestor) of $element which is currently hidden
*
* Returns: the width of $element if it were to be visible.
*/
var getDisplayedWidth = function($element, $hiddenParent) {
var oldDisplay = $hiddenParent.css("display");
$hiddenParent.show();
var displayedWidth = $element.width();
$hiddenParent.css("display",oldDisplay);
return displayedWidth;
};
它的工作原理和返回顯示的寬度。但問題是,「oldDisplay」的值不是內聯顯示屬性的真實值。這是顯示屬性的計算值。 (這不是一個錯誤 - 這完全是我期望基於jQuery文檔的東西)。
這個微小的差異意味着該方法在以下用例中發生故障 - 我們有一個初始爲display:none
的元素,但它是受控的通過一個類而不是內聯風格。所以oldDisplay
被設置爲「無」。現在,當顯示屏恢復時,display:none
成爲內聯樣式。在稍後的執行過程中,當其他一些javascript添加一個類使其可見時,內聯樣式優先,並且該元素不會出現。
我在這種情況下真正想要做的只是提取「顯示」屬性的內聯樣式版本。如果元素沒有內聯「顯示」屬性(如上例),那麼我想oldDisplay
被設置爲一個空字符串。
現在我已經解釋了背景,簡單地說就是這個問題 - 我如何從內聯樣式獲取CSS屬性?
(PS:我知道我可以通過手動解析「style」屬性做到這一點,但我覺得必須有一個更好的辦法,尤其是使用jQuery。)
也許觸發一類設置顯示器是更好的方式去?完全避免內聯? – Selosindis
爲什麼當顯示屏恢復'display:none'變爲內聯樣式? –
@Selosindis只有在我能保證該類優先於目前在那裏的任何類時纔會起作用。如果有問題的元素已經有內聯樣式,我會完全擰緊。 – Kidburla