$('label')。css('width')在Chrome中返回错误的值

时间:2018-10-21 23:54:14

标签: javascript html css google-chrome width

在页面加载时,Bootstrap的navbar上会填充标签,直到不再适合它为止。我正在通过width使用它们的$('label').css('width')属性来执行此操作,它在FF中可以正常工作,但是当我在Chrome中对其进行测试时,标签会溢出navbar和视口。

调试代码时,我发现$('label').css('width')在Chrome中返回的值与浏览器的检查器选项卡中已计算下的值相差甚远:

CHROME

console.log(parseFloat($('label').css('width')))输出:64.725

另一方面,在FF中:

FIREFOX

console.log(parseFloat($('label').css('width')))的输出为:82.4,这是正确的。

HTML

<label class="btn btn-light" data-original-title="" title="">
    <a class="btn" href="http://localhost">
        <img src="images/amazon.png">&nbsp;TEXT
    </a>
</label>

我的问题是,如何在Chrome中获取标签的实际宽度?

感谢

更新

所有这些尝试

$('label')[0].clientWidth; //63
$('label').get(0).offsetWidth; //65
document.defaultView.getComputedStyle($('label')[0])['width']; //64.725px
$('label').css('width'); //64.725px

即使在图像的计算宽度附近也没有一个

临时(希望)解决方案:

这是标签内的图片

这特别奇怪并且很难找到,因为请记住,它在浏览器中有效,而在另一个浏览器中无效。

碰巧的是,我在将图像加载到标签之前查询标签的宽度,导致标签产生误导性的结果。

我使用的是$(window).ready(),但被控有罪,但$(window).on("load", () => {})window.onload = () => {}window.addEventListener('load', () => {})都没有起作用,即使第一个和第一个之间的主要区别之一是其余的是$(window).ready()在DOM可操作后立即执行 且不等待图像加载,而其余的等待此类图像,尽管Chrome浏览器认为目前这不是优先级

解决问题的人:this post

虽然很hack,但实际上setTimeout(() => {}, 0)是这次的英雄,是的,但是超时为0。现在,代码实际上等待图像加载。

注意:为了以防万一,我也确实切换到了window.onload = () => {}

我希望这可以节省别人的时间。

1 个答案:

答案 0 :(得分:0)

尝试使用getComputedStyle,但它只是只读的,无法为DOM设置值

document.defaultView.getComputedStyle(DOM)['width'];