【发布时间】:2010-09-25 01:13:48
【问题描述】:
不要与"How to tell if a DOM element is visible?"混淆
我想确定给定的 DOM 元素在页面上是否可见。
例如。如果元素是设置了display:none; 的父元素的子元素,则它将不可见。
(这与元素是否在视口中无关)
我可以遍历元素的每个父元素,检查 display 样式,但我想知道是否有更直接的方法?
【问题讨论】:
标签: javascript html css dom
不要与"How to tell if a DOM element is visible?"混淆
我想确定给定的 DOM 元素在页面上是否可见。
例如。如果元素是设置了display:none; 的父元素的子元素,则它将不可见。
(这与元素是否在视口中无关)
我可以遍历元素的每个父元素,检查 display 样式,但我想知道是否有更直接的方法?
【问题讨论】:
标签: javascript html css dom
从 Firefox 中的快速测试来看,当元素被 display:none 的父元素隐藏时,大小和位置属性(clientWidth、offsetTop 等)似乎都返回 0。
【讨论】:
使用Prototype:
if($('someDiv').visible) {...}
【讨论】:
当我使用 MochiKit 时,我根据 Ant P 的回答得出的结论是:
getElementPosition('mydiv').y != 0
我还可以通过以下方式检查它是否在视口中(垂直):
y = getElementPosition('mydiv').y
(y < getViewportPosition().y + getViewportDimensions().h &&
getViewportPosition().y < y)
顺便说一句,这也适用于 IE6。
【讨论】:
依靠位置为0是脆弱的。您最好编写一个辅助函数来遍历父母以直接检查他们的显示样式。
【讨论】:
这是迭代解决方案 -
var elementShown = function(e){
if (e == document)
return true;
if ($(e).css('display') == 'none') //or whatever your css function is
return false;
return elementShown(e.parentNode);
}
【讨论】:
如果元素不是通过继承显示的,.getClientRects() 将返回一个空数组(display="none" 来自父/祖先元素)
【讨论】: