过去我们使用CSS属性“display”来显示和隐藏DOM元素。要检查元素是否可见,我们可以使用:
element.offsetWidth > 0
由于我们在使用Flash和Java Applet时遇到了一些问题(它们在显示时停止:无),我们切换到CSS属性“visibility”。
我现在正在寻找一种快速简便的方法来检查元素是否不可见。
我尝试了以下内容:
您是否知道任何其他方式或快捷方式,以查看元素是否可见?
答案 0 :(得分:6)
使用JQuery,你可以这样做
var isVisible = $('#foo').is(':visible');
答案 1 :(得分:3)
请记住,visibility:hidden会隐藏一个元素,但该元素仍会占用其空间,这可能会对布局产生一些意想不到的后果(如果你意识到这一点,它也可能是一个优势)。
我会使用绝对定位将元素向左移动,在可能的屏幕宽度之外。这会使元素脱离流,因此隐藏元素对布局没有影响,使元素几乎不可见,并且它没有display:none的优势。
.hide {
position:absolute;
left:-3000px;
}
然后,要确定元素是否隐藏,您可以使用其offsetLeft属性:
if( myElement.offsetLeft < 0 ){ /* it's hidden */ }
如果您需要确定子元素是否在屏幕外(您不知道它是隐藏元素还是其子元素),您可以使用.offsetParent和while循环,如PPK's Find Position article中所述。
答案 2 :(得分:0)
Toggling Element Visibility是一种不显眼的,语义上有效的呈现内容的方式,对于非CSS感知的浏览器而言,它会很好地降级。
另请查看此DevX article,其中比较了“显示”和“可见性”属性。
答案 3 :(得分:0)
检查焦点是否有效,父母是否可见。
var isVisible = true;
try{
document.getElementById("target").focus();
}catch(err){
isVisible = false;
}
显然它应该适用于输入或链接,但对于其他元素,我不确定。
我在使用jQuery之前研究过同样的问题,但那次我的目标是focus the first availabe field on a form。结果代码如下:
$(":text:visible:enabled").filter(function(){
return $(this).parents.filter(function(){
return this.style.display == "none";
}).size()==0;
}).slice(0,1).focus();
它也适用于隐藏/隐形父母。
答案 4 :(得分:-1)
CSS选择器经过优化,可以找到匹配元素的集合。有几个库实现了这个功能。 JQuery,ExtJS Core来命名一对。
使用Ext Core,我可以编写一个javascript函数来检查可见性,如下所示:
// Checks whether the element is currently visible using
// both visibility and display properties
if(Ext.get(el).isVisible()){
alert('it\'s visible');
};
请参阅http://extjs.com/products/extcore/docs/?class=Ext.Element了解更多Ext Core Ext.Element功能。
答案 5 :(得分:-1)
function isVisible(elem) {
return elem.style.visibility !== "hidden";
}