我找到了一种从隐藏元素中生成getBoundingClientRect
的方法:将其display
样式更改为initial
,以便浏览器可以正确计算。然后立即隐藏该元素,使其永远不会向用户显示。
但这在IE上不起作用。它总是返回0
。
如何在IE上进行这项工作?
var element = document.querySelector('#foo');
console.log('Element is hidden', element.getBoundingClientRect());
element.style.display = 'initial';
console.log('Element shows for little time', element.getBoundingClientRect());
element.style.display = 'none';
<div id="foo" style="display: none;">Guess my size, I'm hidden !</div>
最佳答案
可悲的是,IE不支持initial
值(mdn)。因此赋值不执行任何操作,并且元素保持隐藏,这就是为什么将高度高度设为0的原因。
但是,即使这样做,也无法达到您预期的效果:display: initial
为所有受影响的元素设置display
的通用初始值-inline
和div
都为span
。这是这种行为的少许proof-of-concept。
相反,您必须先隐藏自己的代码来缓存display
的原始值,然后再隐藏它。实际上,这正是jQuery和其他流行框架对其.hide()
的实现所做的: