我使用胡子生成一些HTML,并使用insertAdjacentHTML
将其放在页面上。显然,它转换成了DOM结构,好吧,因为之后我可以通过使用document.querySelector('.contentarea')
调用获得它的句柄。然而,如果我试图获得一个像素值的宽度或高度,它继续抛回'auto'
。
考虑到这可能只是getComputedStyle
的一个问题,我尝试使用.getBoundingClientRect
和.offsetWidth
。两人都返回了0
。如果我将调用放置在setTimeout(function(){}, 1)
中稍微延迟了调用,那么它就能工作,但这对我的生产代码来说并不实用,因为它需要进入同步构造函数。
这种情况发生在火狐(Aurora)和Chrome上。我记得我读过一篇关于Mozilla如何通过使用懒散的框架构造来提高DOM操作性能的文章,我认为可能会有一个bug,因为框架有点懒,但是由于它也发生在Chrome中,这似乎不太可能发生。
有没有人对这里发生的事情或如何解决这个问题有任何想法?在插入HTML后,我确实需要像素的高度/宽度信息。
PS:有浏览器在一个单独的线程中进行HTML到DOM解析/构建吗?我在想,这也可能导致这种行为。
:这是我自己的错。我只是没有注意到在代码试图获取度量之前设置的样式。
发布于 2012-09-21 20:16:46
有几件事会导致“自动”的结果。你找到了其中一个,display: none
。如果元素是内联的,它也将返回auto。
本质上,它必须是一个block
或inline-block
元素,并且必须被呈现。
发布于 2011-12-25 03:18:45
根据我的经验,许多浏览器(IE、Chrome、Firefox)故意推迟计算布局,直到Javascript线程结束或通过超时调用产生结果。
我知道的唯一解决方案是向浏览器屈服,然后重新启动。您使用setTimeout
的方法效果很好。
https://stackoverflow.com/questions/8628005
复制相似问题