检查元素在DOM中是否可见

有没有什么办法可以检查一个元素是否在纯JS(没有jQuery)中可见?

因此,例如,在此页面中:Performance Bikes,如果您将鼠标悬停在交易上(顶部菜单上),会出现一个交易窗口,但在开始时并未显示。 它在HTML中,但不可见。

所以,给定一个DOM元素,我该如何检查它是否可见? 我试过: window.getComputedStyle(my_element)['display']); 但它似乎并没有工作。 我不知道应该检查哪些属性。 在我看来:

display !== 'none'
visibility !== 'hidden'

任何其他我可能会错过的东西?


根据此MDN文档,元素的offsetParent属性将通过display style属性隐藏,只要它或其父项被隐藏,它将返回null。 只要确保元素不固定。 一个脚本来检查这个,如果你没有'position:fixed' 您网页上的元素可能如下所示:

//Where el is the DOM element you'd like to test for visibility
function isHidden(el) {
    return (el.offsetParent === null)
}

另一方面,如果确实有位置固定元素可能会在此搜索中被捕获,那么您会伤心地(并且缓慢地)使用window.getComputedStyle()。 这种情况下的功能可能是:

//Where el is the DOM element you'd like to test for visibility
function isHidden(el) {
    var style = window.getComputedStyle(el);
    return (style.display === 'none')
}

选项#2可能更简单一些,因为它说明了更多的边缘情况,但是我敢打赌,它的处理速度也比较慢,所以如果你不得不多次重复这个操作,最好避免它。


所有其他解决方案为我打破了一些情况..

看到获胜的答案打破在:

http://plnkr.co/edit/6CSCA2fe4Gqt4jCBP2wu?p=preview

最终,我决定最好的解决方案是$(elem).is(':visible') - 但是,这不是纯粹的javascript。 这是jQuery ..

所以我偷看他们的来源,发现我想要的东西

jQuery.expr.filters.visible = function( elem ) {
    return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};

这是来源:https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js


这可能有助于:通过将元素置于最靠左的位置来隐藏元素,然后检查offsetLeft属性。 如果你想使用jQuery,你可以简单地检查:visible选择器并获取元素的可见性状态。

HTML:

<div id="myDiv">Hello</div>

CSS:

<!-- for javaScript-->
#myDiv{
   position:absolute;
   left : -2000px;
}

<!-- for jQuery -->
#myDiv{
    visibility:hidden;
}

javaScript:

var myStyle = document.getElementById("myDiv").offsetLeft;

if(myStyle < 0){
     alert("Div is hidden!!");
}

jQuery:

if(  $("#MyElement").is(":visible") == true )
{  
     alert("Div is hidden!!");        
}

的jsfiddle

链接地址: http://www.djcxy.com/p/2377.html

上一篇: Check if element is visible in DOM

下一篇: Equivalent of jQuery .hide() to set visibility: hidden