如何判断是否显示DOM元素?
这不会与"How to tell if a DOM element is visible?"如何判断是否显示DOM元素?
我想确定给定的DOM元素是否在页面上可见。 例如如果该元素是设置了display:none;
的父级的子元素,则该元素将不可见。
(这有什么好做的元素是否是在视口中与否)
我可以通过元素的每个父迭代,检查display
的风格,但我想知道是否有更直接的方式?
从Firefox的快速测试中,它看起来像大小和位置属性(clientWidth,offsetTop等)全部返回0时,父元素被隐藏display:none
。
使用Prototype:
if($('someDiv').visible) {...}
如果您已经提供了Prototype的这个函数的源代码,以显示它如何实际完成,那将会更有帮助。 – 2008-12-04 15:47:29
我只使用库。我没有写。 – 2008-12-04 17:48:30
由于我使用的是MochiKit,我想出了基于蚂蚁普的回答是:
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);
}
好主意。甚至可以指定:http://www.w3.org/TR/cssom-view/#offset-attributes – Kornel 2008-12-03 00:15:16
在当前的CSSOM View Module草案(2013)中,@Kornel发布的链接不再指向正确的部分。查看[w3.org/TR/cssom-view/#dom-htmlelement-offsettop](http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop)。 – falconepl 2015-10-10 18:15:56