Javascript 如何使jQuery不舍入.width()返回的值?

Javascript 如何使jQuery不舍入.width()返回的值?,javascript,jquery,css,Javascript,Jquery,Css,我到处找都找不到这个。我试图得到一个div的宽度,但是如果它有一个小数点,它会对数字进行四舍五入 例如: #container{ background: blue; width: 543.5px; height: 20px; margin: 0; padding: 0; } 如果我使用$('#container').width()它将返回543,而不是543.5。如何让它不舍入数字并返回完整的543.5(或任何数字)。只是想在这里添加我的经验,尽管这个问

我到处找都找不到这个。我试图得到一个div的宽度,但是如果它有一个小数点,它会对数字进行四舍五入

例如:

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

如果我使用
$('#container').width()它将返回543,而不是543.5。如何让它不舍入数字并返回完整的543.5(或任何数字)。

只是想在这里添加我的经验,尽管这个问题很老:上面的共识似乎是jQuery的舍入实际上和未舍入的计算一样好——但在我所做的事情中,情况似乎并非如此

我的元素通常具有流动宽度,但内容可以通过AJAX动态更改。在切换内容之前,我会暂时锁定元素的尺寸,这样我的布局在转换过程中不会反弹。我发现像这样使用jQuery:

$element.width($element.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());
导致了一些有趣的现象,比如实际宽度和计算宽度之间存在亚像素差异。(特别是,我将看到一个单词从一行文字跳转到另一行文字,表示宽度已更改,而不仅仅是锁定。)从另一个问题----我发现
window.getComputedStyle(element).width
将返回一个未舍入的计算。所以我把上面的代码改成了

var e = document.getElementById('element');
$('#element').width(window.getComputedStyle(e).width);
有了这个密码,就没有有趣的弹跳了!这一经验似乎表明,未经修正的值实际上对浏览器很重要,对吗?(在我的例子中,Chrome版本是26.0.1410.65。)

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

$("#container")[0].getBoundingClientRect().width
注:对于IE8及以下版本,请参见MDN文档中的

$(“#log”).html(
$(“#容器”)[0]。getBoundingClientRect().width
);
#容器{
背景:蓝色;
宽度:543.5px;
高度:20px;
保证金:0;
填充:0;
}

是一个很好的起点,但使用时还将包括填充和边框宽度,但情况并非如此:

返回的TextRectangle对象包括填充、滚动条和 边界,但不包括边界。在Internet Explorer中 边框的坐标包括上边框和左边框 客户区的管理

如果您的目的是获得精确的
宽度
值,则必须删除填充和边框,如下所示:

$element.width($element.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)

使用以下方法获得准确的宽度:

var htmlElement=$('class or id');
var temp=htmlElement[0].style.width;

为什么要使用十进制像素宽度?无论如何,它们都会四舍五入到整数。你不能有半个像素,为什么需要这个?没有这些信息,这个问题就没有意义了。@JuanMendes在我的例子中,在HiDPI显示器上,Chrome38计算非整数窗口宽度。所以,如果$width四舍五入,比如说,1250.6到1251,我根据1251进行计算,我就有问题了。取整并不是一个大问题。jQuery的.css()的当前文档指出getComputedStyle()被称为runtimeStyle(),并声称.css()的优点之一就是这个统一的接口。+1如果要设置另一个元素的宽度,请确保以这种方式更改其宽度:$(“#其他”).css(“宽度”,“$(“#容器”).get(0).getBoundingClientRect().width+“px”);如果使用jQuery width(),该值将被舍入。根据类似的问题,
width
height
属性在IE的所有版本中都不受支持,因此在某些情况下,需要先计算它们,然后才能使用:很好!同样的问题适用于外径(正确)?:)小注释:`在IE8及以下版本中,getBoundingClientRect()返回的DOMRect对象缺少高度和宽度属性。此外,无法将其他属性(包括高度和宽度)添加到这些DOMRect对象上。`请注意,
getBoundingClientRect()
在应用CSS转换后计算维度。测试后,我发现此方法不适用于隐藏元素(
display:none
)。您不应该使用
.replace(“px”),“”)
as
parseInt
应该为您删除它。这个问题都是关于防止舍入的,我对这里明确的假设感到困惑,即舍入对于填充值是好的。为什么你会把它和宽度值区别对待?!可能使用
parseFloat()
吗?类似地,由于
innerWidth()
是原始问题的一部分,我担心这里的边框宽度计算也会对舍入值起作用。如果您实际设置并在
style.width中可用,为什么您希望jquery获得计算的宽度