Javascript !重要提示和显示:无和.height()古怪

Javascript !重要提示和显示:无和.height()古怪,javascript,jquery,css,Javascript,Jquery,Css,我昨天在处理一段JS代码时发现了一些奇怪的东西。我有一个隐藏的div(display:none),我在JS的一些计算中使用了它的高度。这一切都很正常,直到我添加了我的“隐藏”类(它有display:none!important) 突然,高度总是0。除了,没有其他变化!重要信息显示在显示屏上 经过一番挖掘,我把问题缩小到了我觉得很奇怪的地方: #b{display:none;}/*报告的高度为36*/ #c{显示:无!重要;}/*报告的高度为0*/ 我已经创建了一个非常基本的方法来隔离它。它还使

我昨天在处理一段JS代码时发现了一些奇怪的东西。我有一个隐藏的
div
display:none
),我在JS的一些计算中使用了它的高度。这一切都很正常,直到我添加了我的“隐藏”类(它有
display:none!important

突然,高度总是
0
。除了
,没有其他变化!重要信息
显示在显示屏上

经过一番挖掘,我把问题缩小到了我觉得很奇怪的地方:

#b{display:none;}/*报告的高度为36*/
#c{显示:无!重要;}/*报告的高度为0*/
我已经创建了一个非常基本的方法来隔离它。它还使用vanilla JS来获取高度,这似乎很好/正如预期的那样

jQuery似乎不正确地报告了不可见div的高度,这是
!重要信息
操作正确


这是jQuery中的一个bug吗

我不认为这是jQuery中的错误,当您设置
时,jQuery会将
显示设置为
,计算
高度的时间为几分之一秒!重要信息
即使是ovverriden,也仅此而已

我想我们需要更多的解释

如果元素没有任何高度,则基本上无法从DOM中获取元素的高度。因此,当
显示
时,
高度
不存在或
为零

在jQuery中,如果
display
none
,我们可以将
display
设置为
block
几秒钟以获得
高度
,在此期间
内联
样式会像jQuery通常所做的那样进行更改

<div id="something" style="display:block">/div>
/div>
然后取
高度
,但此时如果设置了
显示:无!重要信息
在css中,此内联样式不起作用,
height
computed变为
zero

在我个人看来,最好不要使用!这很重要,因为它使您的代码/演示文稿难以阅读。Css通常有多种方式覆盖样式


如果仍要继续,请使用内联
!重要信息
可能会覆盖您的样式,并使用jQuery show作为第二种技术自己计算高度,或者只需覆盖jQuery函数来计算高度:)

最有可能的是您的
显示:无不带
!重要信息
被否决。Display none确实应该返回0可能重复的@user3008011 No,请参阅小提琴。@DAC84,它不包括!重要用途如果您手动设置高度,它会报告。为什么
$('#c')
的高度是0呢?@JamesDonnelly,因为
!重要的可以重写甚至是内联样式,我们通常认为它不会被任何东西所覆盖。answer@sabithpocker我想你是对的。谢谢