获取元素的实际浮点宽度

Sat*_*vik 44 css floating-point jquery width

我正在使用jQuery(v1.7.1),我需要得到一个元素的绝对浮点宽度,但所有jQuery的宽度方法似乎都是对宽度值进行四舍五入.

例如,如果元素的实际宽度是20.333333px,则jQuery的width方法返回20,即忽略小数值.

你可以在这个jsFiddle上看到我的意思

所以,我的问题是:如何获得元素宽度的浮点值?

Ros*_*len 66

如果您已经有对DOM元素的引用,那么element.getBoundingClientRect将获得您想要的值.

该方法自Internet Explorer 4以来就已存在,因此可以安全地随处使用.但是,widthheight属性仅存在于IE9 +中.如果您支持IE8及以下版本,则必须计算它们:

var rect = $("#a")[0].getBoundingClientRect();

var width;
if (rect.width) {
  // `width` is available for IE9+
  width = rect.width;
} else {
  // Calculate width for IE8 and below
  width = rect.right - rect.left;
}
Run Code Online (Sandbox Code Playgroud)

getBoundingClientRectwindow.getComputedStyleChrome 28 快70%,Firefox中的差异更大:http://jsperf.com/getcomputedstyle-vs-getboundingclientrect

  • 据Mozilla Network Developer称:getBoundingClientRect()是从ie4开始引入的,但`width`和`height`属性仅在ie9上引入.因此,对于ie8,你必须计算它"top - bottom"和"right-left".没有什么重要的,只是为了完全准确. (3认同)
  • 这实际上不适用于ie9.在ie9中,getBoundingClientRect返回舍入值,而不是提问者想要的浮点宽度.在ie9中获得准确值的唯一方法是使用getComputedStyle.https://jsfiddle.net/JoolsCaesar/z6bx2moh/ (2认同)

Joh*_*ner 14

试试这个:

var element = document.getElementById("a");
alert(window.getComputedStyle(element).width);
Run Code Online (Sandbox Code Playgroud)

更新小提琴:http://jsfiddle.net/johnkoer/Z2MBj/18/

  • `getBoundingClientRect`比`getComputedStyle`快70%并提供相同的尺寸:http://jsperf.com/getcomputedstyle-vs-getboundingclientrect (5认同)
  • 要添加@ ssorallen的注释,`getComputedStyle`返回一个字符串,其中`getBoundingClientRect`返回一个浮点数. (5认同)
  • `getBoundingClientRect`不会返回与`getComputedStyle`相同的值,如果该元素受到任何CSS转换的影响,那么`getBoundingClientRect`将返回转换后的值. (5认同)
  • 在IE9中,`getBoundingClientRect`返回舍入值,`getComputedStyle`返回浮点值(一次通过`parseFloat`)以摆脱"px".jsfiddle.net/JoolsCaesar/z6bx2moh (2认同)
  • 对于它的价值,我只是在chrome中运行了一些基准测试,并且`getComputedStyle()`比`getBoundingClientRect()`更快。 (2认同)