Javascript 将css宽度字符串转换为常规数字
在尝试计算隐藏元素的宽度时,我发现jquery.width()为该元素的宽度返回0 我发现使用jquery.css('width')将通过使用声明的样式宽度返回正确的宽度(即使该值与初始样式表不同)。问题是css('width')方法返回一个字符串,通常以“100px”的方式返回。我的问题归结为:如何从“100px”字符串中检索数字?Javascript 将css宽度字符串转换为常规数字,javascript,jquery,css,numbers,width,Javascript,Jquery,Css,Numbers,Width,在尝试计算隐藏元素的宽度时,我发现jquery.width()为该元素的宽度返回0 我发现使用jquery.css('width')将通过使用声明的样式宽度返回正确的宽度(即使该值与初始样式表不同)。问题是css('width')方法返回一个字符串,通常以“100px”的方式返回。我的问题归结为:如何从“100px”字符串中检索数字? 有一个简单的方法吗?如果它总是以px格式返回,“100px”、“50px”等(即不是“em”或百分比),您可以 var width = parseInt($("#
有一个简单的方法吗?如果它总是以px格式返回,“100px”、“50px”等(即不是“em”或百分比),您可以
var width = parseInt($("#myelem").css("width"),10); // always use a radix
或
它忽略了“px”后缀,所以您应该可以开始了
虽然在内心深处,我认为如果$(“#myelem”).width()不起作用,有些事情是不对的
关于隐藏元素的注释
如果您正在添加jQuery以逐步增强页面,则当页面首次加载时,您正在计算的元素应该是可见的。因此,您应该在最初隐藏元素之前获得宽度。通过这样做,$(“#myelem”).width()将起作用
var myWidth = 0;
$(document).ready( function () {
myWidth = $("#myelem").width();
$("#myelem").hide();
});
哦,我想到了:
新数字($elem.css('width').slice(0,-2))
//提取“px”并返回一个常规数字
现在我只希望jquery总是以同样的字符串方式返回:“100px”我会坚持使用
.width()
,因为它实际上得到的是计算的宽度,而不是css宽度。与其用.hide()
(display:none
)隐藏它,不如用.css('visible','hidden')
隐藏它,然后.width()
就可以了
从我的评论来看
如果您不想更改.hide()
's,则可以应用可见:隐藏
,然后应用.show()
,然后测量高度。测量完后,将其反转。当对象被visible:hidden
隐藏时,它们仍然会影响页面布局-请注意这一点
为了避免标签弄乱布局,您可以将位置设置为绝对,将其移动到主体标签,然后测量。您可以使用正则表达式删除非数字,然后仅转换为数字。无论您如何定义宽度(
px
,em
,%
,pt
),这都有效。也保留小数点
香草javascript
Number(elem.style.width.replace(/[^\d\.\-]/g, ''));
jQuery
Number($elem.css('width').replace(/[^\d\.\-]/g, ''));
在纯JavaScript中:
parseInt('100px', 10)
适用于“100em”、“100%”,甚至适用于“100”。不需要任何正则表达式模式。我同意使用计算的宽度。事实上,元素隐藏在加载页事件中,另外还有一些
.hide
。我将css从“显示:无”更改为“可见性:隐藏”,然后我可以使用.width()
读取相同的值。超级的。现在,我要做的就是将所有.hide()
摘录更改为建议的.css('visible','hidden')
。我怀疑我还需要将.show()
更改为.css('visibility','visible')
。谢谢,不用做那些工作。然后可以应用可见:隐藏,然后应用.show()
,然后测量宽度。测量完后,将其反转。那你就不用做那么多改变了。当对象被可见:隐藏
隐藏时,它们仍然会影响页面-请注意这一点。.width()
不起作用的原因是,如果对象被隐藏,则隐藏()
(显示:无
)它们对布局没有贡献,因此没有宽度。我试图计算宽度的元素是可调整大小的,可以在执行过程中隐藏,因此其宽度最终会改变。因此,正如您所建议的,我可以使用一个变量来保存它的值,该值是在.ready()
事件页上计算的,在每个调整大小回调事件中,我必须重新计算-使用.width()
-并应用新值。因此,即使元素被隐藏,我也会有当前值。Number($elem.css('width')。replace(/[^\d\.]/g',)
-正则表达式与数字转换相结合,解决了px
/em
/%
问题。很好奇,但是显式传递基数有什么好处?它不是默认为10吗?顺便说一句,这是一个很好的解决方案。@Frank现在浏览器的默认设置非常好。。。但我已经非常老了,仍然记得使用非10
radix的浏览器的问题。如果您将它们都定义为px
,就会出现问题。但是,如果您将一些宽度设置为%
,它将返回为50%
,您的切片函数将修剪掉最右边的数字。您可以使用indexOf
测试px
的安全性,也可以使用正则表达式删除非数字。无论您如何定义宽度(px
,em
,%
,pt
)js:Number(elem.style.width.replace(/[^\d\.]/g',)代码>或jQuery:数字($elem.css('width')。替换(/[^\d\.]/g')代码>AMMENDENT:我试图计算宽度的元素可以调整大小,并且可以在执行期间隐藏,因此其宽度最终会改变。
parseInt('100px', 10)