Javascript 如何从隐藏元素获取BoundingClientRect?(不适用于IE)

Javascript 如何从隐藏元素获取BoundingClientRect?(不适用于IE),javascript,html,css,internet-explorer,Javascript,Html,Css,Internet Explorer,我找到了一种从隐藏元素getBoundingClientRect的方法:将它的显示样式设置为初始,以便浏览器可以正确计算。然后立即隐藏元素,使其永远不会显示给用户 但它在IE上不起作用。它总是返回0 我怎样才能在IE上工作 var-element=document.querySelector('#foo'); log('Element is hidden',Element.getBoundingClientRect()); element.style.display='initial'; lo

我找到了一种从隐藏元素
getBoundingClientRect
的方法:将它的
显示
样式设置为
初始
,以便浏览器可以正确计算。然后立即隐藏元素,使其永远不会显示给用户

但它在IE上不起作用。它总是返回
0

我怎样才能在IE上工作

var-element=document.querySelector('#foo');
log('Element is hidden',Element.getBoundingClientRect());
element.style.display='initial';
log('Element显示时间很短',Element.getBoundingClientRect());
element.style.display='none'

猜我的尺寸,我藏起来了遗憾的是,IE不支持
初始值(
值()。所以赋值不起作用,元素保持隐藏,这就是为什么得到0作为结果高度

但是,即使这样做了,它也不会按照您预期的方式工作:
display:initial
为所有受影响的元素设置
display
的通用初始值-即
inline
用于
div
s和
span
s。这种行为很少

相反,您必须先用自己的代码缓存
display
的原始值,然后再隐藏它。实际上,这正是jQuery和其他流行框架在实现
.hide()
时所做的:

匹配的元素将立即隐藏,没有动画。 这大致相当于调用.css(“display”、“none”), 除了display属性的值保存在jQuery的 数据缓存,以便以后可以将显示恢复到其初始值。 如果某个元素的显示值为inline且隐藏,则会显示, 它将再次以内联方式显示


这可能间接地回答了这个问题-如果需要为隐藏元素获取BoundingClientRect(),另一个选项是以不同的方式隐藏它(除了display:none)。例如,将颜色和/或背景色设置为透明。

我使用
element.style.display='block'使其工作