Javascript jQuery width、outerWidth()和innerWidth()返回不正确的数据

Javascript jQuery width、outerWidth()和innerWidth()返回不正确的数据,javascript,jquery,width,element,Javascript,Jquery,Width,Element,由于某些原因,我无法让jQuery为各种元素提供可靠的宽度数据。下面是一个小提琴的链接,演示了问题: 我正在尝试创建多维下拉菜单。正如您在JSFIDLE中看到的,第二个嵌套菜单的位置不正确。我用来定位它的jQuery使用outerWidth()查询同级锚元素以发现其宽度,然后根据返回的宽度搜索嵌套列表的左侧位置。当我在CSS中给同级锚点元素一个设置的宽度时,我得到了接近正确值的值,但没有该静态宽度,outerWidth()返回“2” 但是,即使我给锚元素一个设置的宽度,outerWidth(t

由于某些原因,我无法让jQuery为各种元素提供可靠的宽度数据。下面是一个小提琴的链接,演示了问题:

我正在尝试创建多维下拉菜单。正如您在JSFIDLE中看到的,第二个嵌套菜单的位置不正确。我用来定位它的jQuery使用
outerWidth()
查询同级锚元素以发现其宽度,然后根据返回的宽度搜索嵌套列表的左侧位置。当我在CSS中给同级锚点元素一个设置的宽度时,我得到了接近正确值的值,但没有该静态宽度,
outerWidth()
返回“2”

但是,即使我给锚元素一个设置的宽度,
outerWidth(true)
仍然不能正确地包含元素的边界


我正要把头发拔出来。为什么这样的废话就不能像广告那样工作?

各种宽度命令对隐藏元素不起作用(
display:none

如果使用css设置宽度,jquery将返回该宽度。否则你将得不到任何或毫无意义的结果

经典的解决方案是将元素放置在屏幕外,检查宽度,然后将其隐藏并放回原处。(您可能会找到一个jquery插件,它可以在一个命令中实现这一点。)

有时有一些方法可以重新构造html和/或css,因此可以避免这种情况

有时,可以在显示元素后立即修改大小


您还可以尝试将
可见性设置为
隐藏
,以便元素获得大小,但不可见。根据您的设计,这可能会起作用。

调用jQuery width函数时,在接收看似随机的结果时,我遇到了类似的问题。当浏览器刷新时,我大约有50%的时间会得到正确答案

我犯了一个错误,即在$(document).ready()函数中立即检查div的宽度。当我改为在$(window).load()内调用outerWidth()时,总是返回正确的答案。

outherWidth()可以返回无效数据,如果元素本身有负边距

您需要调用
$(window).trigger('resize')
,这将触发一个假窗口调整大小事件。 之后,
outerWidth
应具有适当的值

确保在填充数据后触发假窗口调整大小事件

换句话说,例如,如果您正在检查
内部
的宽度,请确保在触发假调整大小事件并检查
外部宽度之前填充表格并完成所有调整大小操作


由于Ariel在

中提到的限制,这是一种变通方法。您最初的建议实际上是正确的,但我最初的修复逻辑是错误的。一旦我给脚本一个在.hide()初始化元素之前检索宽度的机会,这些数字是合理的。