jQuery - 找出CSS中指定的元素的宽度(例如,如果在%age中指定,则为%age,而不仅仅是在px中)

vit*_*tch 12 css jquery dimensions

与此问题类似: 在jQuery中获取CSS规则的百分比值

但是,我正在编写一个插件,它需要优雅地处理它,这取决于最初指定的宽度.如果元素在像素最初指定它是好的,因为这是该值.width(),.innerWidth(),outerWidth().css('width')回报.

但我想知道它是否是原始设置百分比.因此,如果容器元素调整大小,那么我知道重新计算我在元素上设置的宽度.

这可能吗?我唯一能想到的是试图遍历document.stylesheets寻找相关规则,但我认为这或多或少不可能做到一般.还有其他想法吗?

谢谢!

dat*_*ata 5

这似乎.css('width')对我有用。

展示此作品的小例子:

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>

<div style="width:10%;" id="foo"></div>
<script>
alert($("#foo").css('width'));
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这给了我“10%”的输出。希望我没有错过任何明显的事情。

  • 实际上,我刚刚查看了这个特定的示例,因为如果设置为内联样式(`style="width: 10%"`),jQuery 也会返回指定的值。这不适用于样式表样式。这种事情是 jQuery 的 Do What I Mean 方法的典型做法,试图隐藏基本的浏览器和概念差异(另请参阅“attr()”的可怕之处)。这不可避免地是一个有漏洞的抽象,使错误变得更加混乱。 (10认同)
  • 这取决于浏览器。在 IE 上,jQuery 使用“currentStyle”为您提供指定的宽度。在其他浏览器上,它使用“getCompulatedStyle”为您提供计算样式,该样式从“%”解析为“px”。 (6认同)

vit*_*tch 2

我找不到一种方法来完成我在问题中所要求的操作,但我想出了一个解决方法,它允许我在我的情况下做我需要做的事情。有问题的代码适用于我的 jQuery 插件,名为 jScrollPane ( http://jscrollpane.kelvinluck.com/ )。最后我所做的是将宽度设置为 null ( elem.css('width', null);)。这会删除我之前自己设置的宽度,并允许元素采用样式表中定义的自然宽度(即使用百分比,如果它是这样定义的)。然后我可以测量这个新值并用它来将宽度设置为我想要的数字......