我正在尝试计算具有隐藏父元素的元素的宽度。因为该元素不可见,所以它返回零宽度。所以我写了这个小函数:
/**
* 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。)