.width()函数未返回正确的值

时间:2016-02-11 08:18:40

标签: jquery html

我正在尝试使用.width()通过jQuery动态访问元素的宽度。在开发人员工具中,我可以看到元素的宽度为37.333Px,其中.width()给出38.33334Px。

开发人员工具中的宽度

enter image description here

宽度来自.width()

enter image description here

在这种情况下,差异是1px,但有时它的差异是小数。为什么会有这样的差异?我哪里错了?是否还有其他可以获得准确的宽度。

5 个答案:

答案 0 :(得分:7)

我们可以通过下面列出的几种方法获得宽度,

width() - 设置或返回元素的宽度

innerWidth() - 返回元素的宽度(包括填充)

outerWidth() - 返回元素的宽度(包括填充和边框)。

outerWidth(true) - 返回元素的宽度(包括填充,边框和边距)。

enter image description here

enter image description here

答案 1 :(得分:3)

仅在DOM准备好为您提供确切值时才使用.width()。 因为在解析时需要时间来调整自己。

因此您需要使用$(document).ready(...$(window).load...

答案 2 :(得分:1)

当隐藏元素或其父元素时,.width()报告的值不保证准确。 此外,当用户缩放页面时,尺寸可能不正确;

请注意,.width()将始终返回内容宽度,而不管CSS box-sizing属性的值如何。从jQuery 1.8开始,这可能需要检索CSS宽度加上box-sizing属性,然后在元素具有box-sizing:border-box时减去每个元素上的任何潜在边框和填充。要避免这种惩罚,请使用.css(" width")而不是.width()。

在选择元素时,您应该更具体。使用XPath绝不是一个好主意,因为树结构中的最小变化将破坏您的代码。尝试使用ID,Class等进行选择

答案 3 :(得分:1)

我之前有同样的问题并得到了答案:

浏览器采取了两项措施:

首先:关于百分比本身 - 例如 - Internet Explorer 7-11会将任意百分比截断为2位小数,更现代的浏览器将舍入到大量小数位。

然后第二个动作是使用该百分比计算得到的像素值。

示例:

  

我们有一个宽度为1325px的容器。
     在内部,我们有一个宽度设置为CSS的盒子,宽度设置为50.5290112%       这应该通过使用计算(1325/100)x 50.5290112为我们提供669.5093984px框的像素宽度。

     

在Internet Explorer 8中,框的宽度实际为669像素       IE8中发生的事情是浏览器将百分比截断为50.52%       通过使用计算(1325/100)×50.52,这导致像素宽度为669.39px       然后浏览器将其向下舍入到最接近的整数,导致实际宽度为669px。

<强> Reference Link

答案 4 :(得分:1)

为什么不使用 .getBoundingClientRect()

$('whatever')[0].getBoundingClientRect().width