如何使jQuery不轮回由.width()返回的值?

我搜查了四周,找不到这个。 我想获得一个div的宽度,但如果它有一个小数点,它将数字四舍五入。

例:

#container{ background: blue; width: 543.5px; height: 20px; margin: 0; padding: 0; } 

如果我做$('#container').width(); 它将返回543而不是543.5。 我怎样才能得到这个数字,并返回完整的543.5(或其他数字)。

使用本地Element.getBoundingClientRect而不是元素的样式。 它在IE4中引入,并受到所有浏览器的支持:

 $("#container")[0].getBoundingClientRect().width 

注意:对于IE8及更低版本,请参阅MDN文档中的“浏览器兼容性”注意事项 。

 $("#log").html( $("#container")[0].getBoundingClientRect().width ); 
 #container { background: blue; width: 543.5px; height: 20px; margin: 0; padding: 0; } 
 <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="container"></div> <p id="log"></p> 

只是想在这里添加我的经验,虽然这个问题是古老的:上面的共识似乎是,jQuery的四舍五入实际上就像一个没有根据的计算一样好 – 但似乎并没有在我一直在做的事情。

我的元素通常具有stream体宽度,但是通过AJAXdynamic更改的内容。 在切换内容之前,我暂时locking了元素的尺寸,这样在转换过程中我的布局不会反弹。 我发现这样使用jQuery:

 $element.width($element.width()); 

造成了一些趣味性,就像实际宽度和计算宽度之间存在子像素差异。 (具体来说,我会看到一个字从一行文本跳转到另一行,表明宽度已经被改变,而不是被locking)。从另外一个问题 – 获取元素的实际浮点宽度 – 我发现out window.getComputedStyle(element).width将会返回一个没有window.getComputedStyle(element).width的计算。 所以我改变了上面的代码

 var e = document.getElementById('element'); $('#element').width(window.getComputedStyle(e).width); 

和那个代码 – 没有有趣的弹跳! 这个经验似乎表明,没有根据的价值确实对浏览器有影响,对吧? (在我的情况下,Chrome版本为26.0.1410.65。)

Ross Allen的答案是一个很好的起点,但是使用getBoundingClientRect()。width也将包含填充和边框宽度,而不是jQuery的宽度函数 :

返回的TextRectangle对象包括填充,滚动条和边框,但不包括边距。 在Internet Explorer中,边界矩形的坐标包括客户区的顶部和左边界。

如果你的意图是要获得width值的精度,你将不得不像这样删除填充和边框:

 var a = $("#container"); var width = a[0].getBoundingClientRect().width; //Remove the padding width (assumming padding are px values) width -= (parseInt(a.css("padding-left")) + parseInt(a.css("padding-right"))); //Remove the border width width -= (a.outerWidth(false) - a.innerWidth()); 

您可以使用getComputedStyle

 parseFloat(window.getComputedStyle($('#container').get(0)).width)