[英]How to check element's visibility via javascript?
我对检查一个元素是否显示的方式感兴趣:none style explicility(即style =“display:none”),有一个具有(或继承)此样式的类,或者其中一个父元素被隐藏(和我的元素继承了这个)
情况1:
<body><div><span style="display:none;">Some hidden text</span></div>
要么
<body><div style="display:none;"><span>Some hidden text</span></div>
案例2:
SomeClass { display:none; }
<body><div class="SomeClass"><span>Some hidden text</span></div>
谢谢,
您正在寻找两种不同方案的解决方案。
第一种情况是获取css属性的级联/计算样式。 请参阅此答案以了解如何执行此操作。
第二种情况是检测是否隐藏了任何元素的父项 。 这需要遍历并且繁琐且缓慢。
您可以采用此处概述的解决方案(并从1.3.2开始采用jQuery / Sizzle),并阅读元素的维度:
var isVisible = element.offsetWidth > 0 || element.offsetHeight > 0;
如果它具有尺寸,那么它在文档中占据一些矩形空间(无论多小)的意义上是可见的。 请注意,对于某些浏览器中的某些元素,此技术仍有一些缺点 ,但在大多数情况下应该可以使用。
这是确定元素是否可见的最快捷,最简单的方法。 它甚至是jQuery如何做到的。
function isVisible(elem) {
return elem.offsetWidth > 0 || elem.offsetHeight > 0;
}
每个案例都需要自己检查,你需要知道该元素的ID。 首先,抓住元素(只是为了使代码可读):
var MyElementName = document.getElementById("MyElementName");
然后做你的检查:
情况1:
if (MyElementName.style.display == "none")
案例2 ,查看父级,首先检查FF:
if ((MyElementName.previousSibling.nodeType == 3 )
&& (MyElementName.parentNode.nextSibling.style.display == "none"))
那么对于其他浏览器:
else (MyElementName.parentNode.style.display == "none")
案例3 ,查找应用的css类:
if (MyElementName.className = "SomeClass")
上述解决方案迎合了这种“隐形”场景:
display:none;
但它不适合这个:
visibility: hidden;
为了包括可见性测试:隐藏; 脚本可以修改如下...
首先,创建一个跨浏览器兼容的函数来获得所需元素的计算样式:
computedStyle = function(vElement) {
return window.getComputedStyle?
?window.getComputedStyle(vElement,null)
:vElement.currentStyle; //IE 8 and less
}
其次,创建测试可见性的功能
isVisible = function(vElement) {
return !(vElement.offsetWidth == 0 && vElement.offsetHeight == 0)
&& computedStyle(vElement).visibility != "hidden";
}
最后,只需在需要的地方引用isVisible函数,如下所示:
if (isVisible(myElement)) {
alert('You can see me!');
} else {
alert('I am invisible ha ha!');
}
只是注意到当前的isVisible()测试不适合许多“隐形”场景(但是我认为测试可以加强以包含这些)。 这里有一些例子:
关于上面的computedStyle()函数,也值得注意以下几点:
这是你想要做的吗?
function SomeClass()
{
if (document.getElementById("MY_DIV_ID").style.display == "none")
{
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.