在页面加载时,Bootstrap的navbar
上会填充标签,直到不再适合它为止。我正在通过width
使用它们的$('label').css('width')
属性来执行此操作,它在FF中可以正常工作,但是当我在Chrome中对其进行测试时,标签会溢出navbar
和视口。
调试代码时,我发现$('label').css('width')
在Chrome中返回的值与浏览器的检查器选项卡中已计算下的值相差甚远:
和console.log(parseFloat($('label').css('width')))
输出:64.725
另一方面,在FF中:
和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"> 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 = () => {}
。
我希望这可以节省别人的时间。
答案 0 :(得分:0)
尝试使用getComputedStyle,但它只是只读的,无法为DOM设置值
document.defaultView.getComputedStyle(DOM)['width'];