如何检查元素是否隐藏在jQuery中?

How do I check if an element is hidden in jQuery?

提问人:Philip Morton 提问时间:10/7/2008 最后编辑:Mateen UlhaqPhilip Morton 更新时间:6/24/2023 访问量:3161538

问:

如何使用 、 或 切换元素的可见性?.hide().show().toggle()

如何测试元素是否为 或?visiblehidden

JavaScript jQuery DOM 可见性

评论

68赞 Reuben 2/1/2011
值得一提的是(即使经过这么长时间),它适用于 jQuery 1.4.4,但不适用于 jQuery 1.3.2,在 Internet 浏览器 8. 这可以使用 Tsvetomir Tsonev 的有用测试片段进行测试。只要记住更改jQuery的版本,在每个版本下进行测试。$(element).is(":visible")
5赞 Mark Schultheiss 3/23/2016
这是相关的,尽管是一个不同的问题:stackoverflow.com/questions/17425543/......
2赞 user1742529 1/2/2021
如果您对虚拟 css 元素隐藏不感兴趣,而是对用户在“视口区域”中的物理可见性感兴趣,那么 cosider 可以看到 stackoverflow.com/questions/487073/... 和 stackoverflow.com/questions/123999/...

答:

1095赞 Mote 10/7/2008 #1
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
    // 'element' is hidden
}

上述方法不考虑父级的可见性。要同时考虑父项,应使用 或 。.is(":hidden").is(":visible")

例如

<div id="div1" style="display:none">
  <div id="div2" style="display:block">Div2</div>
</div>

上述方法将考虑可见,而不可见。但是,在许多情况下,上述内容可能很有用,尤其是当您需要查找隐藏的父项中是否有任何可见的错误时,因为在这种情况下将不起作用。div2:visible:visible

评论

138赞 chiborg 3/3/2010
这仅检查单个元素的 display 属性。:visible 属性还检查父元素的可见性。
17赞 evanmcd 1/14/2012
这是使用 IE 8 进行测试时唯一对我有用的解决方案。
21赞 Casey 3/15/2014
@chiborg 是的,但有时这就是你想要的,我不得不以艰难的方式学习jQuery是多么“聪明”......
10赞 Jimmy Knoot 4/14/2015
这确实回答了这个问题,因为问题是关于单个元素的,并且通过使用 和 函数,但是,正如大多数人已经说过的那样,我们应该使用 和 伪类。hide()show()toggle():visible:hidden
2赞 atheaos 4/26/2017
当元素存在但当前不在页面上时,例如在 detach() 之后,可以使用此答案。
1620赞 twernt 10/7/2008 #2

您可以使用隐藏的选择器:

// Matches all elements that are hidden
$('element:hidden')

可见的选择器:

// Matches all elements that are visible
$('element:visible')

评论

71赞 codecraig 7/12/2011
请注意,本演示文稿中有一些与性能相关的良好提示: addyosmani.com/jqprovenperformance
29赞 Etienne Dupuis 7/5/2012
在第 21 页到第 28 页,它显示了 :hidden 或 :visible 与其他选择器相比有多慢。谢谢你指出这一点。
116赞 vbullinger 2/20/2013
当你处理几个因素而很少发生时——即荒谬的绝大多数情况——时间问题是一个非常小的问题。哦,不!它花了 42 毫秒而不是 19 毫秒!!
18赞 ZoomIn 8/9/2013
我正在使用此选择器以柔和的方式切换元素。$('element:hidden') 对我来说总是正确的!
16赞 Joshua Walsh 1/15/2016
@cwingrav您可能需要重新阅读文档,:hidden 适用于所有元素。表单元素 with 只是可以触发 :hidden 的一种情况。没有高度和宽度的元素、具有 的元素以及具有隐藏祖先的元素也将符合 :hidden 的条件。type="hidden"display: none
10227赞 Tsvetomir Tsonev 10/7/2008 #3

由于问题涉及单个元素,因此此代码可能更合适:

// Checks CSS content for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");

// The same works with hidden
$(element).is(":hidden");

它与 twernt 的建议相同,但适用于单个元素;并且它与 jQuery FAQ 中推荐的算法相匹配

我们使用 jQuery 的 is() 将所选元素与另一个元素、选择器或任何 jQuery 对象一起检查。此方法沿 DOM 元素遍历以查找匹配项,该匹配项满足传递的参数。如果存在匹配项,它将返回 true,否则返回 false。

评论

182赞 kralco626 12/30/2010
这种解决方案似乎鼓励混淆 和 ;而 Mote 的解决方案清楚地表明了编码人员打算检查 ;(通过提及隐藏和显示哪个控件不是visible=falsedisplay:nonedisplay:nonedisplay:nonevisible=true)
100赞 Tsvetomir Tsonev 1/6/2011
这是正确的,但正如 chiborg 指出的那样,也会检查父元素是否可见。:visible
51赞 Tsvetomir Tsonev 1/15/2011
你说得有道理 - 我会明确表示代码只检查属性。鉴于原来的问题是 和 ,并且他们设置了 ,我的答案是正确的。顺便说一句,它确实适用于 IE7,这里有一个测试片段 - jsfiddle.net/MWZssdisplayshow()hide()display ;
60赞 Kzqai 1/5/2012
我实际上发现反向逻辑词更好: !$('selector').is(':hidden');出于某种原因。值得一试。
24赞 Max Leske 6/22/2012
这是一个针对 regexp:jsperf.com/jquery-is-vs-regexp-for-css-visibility 的简单基准测试 is()。结论:如果你是为了性能,请使用正则表达式而不是is()(因为is()在查看实际元素之前首先会查找所有隐藏的节点)。
330赞 Simon_Weaver 7/25/2009 #4

通常,在检查某些东西是否可见时,您将立即继续并用它做其他事情。jQuery链接使这变得容易。

因此,如果你有一个选择器,并且你只想在它可见或隐藏时才对它执行一些操作,你可以使用或跟随它与你想要执行的操作链接。filter(":visible")filter(":hidden")

因此,与其说是这样的语句,不如说:if

if ($('#btnUpdate').is(":visible"))
{
     $('#btnUpdate').animate({ width: "toggle" });   // Hide button
}

或者更有效:

var button = $('#btnUpdate');
if (button.is(":visible"))
{
     button.animate({ width: "toggle" });   // Hide button
}

您可以在一行中完成所有操作:

$('#btnUpdate').filter(":visible").animate({ width: "toggle" });

评论

25赞 LocalPCGuy 4/22/2012
没有理由提取示例中使用的代码段中的 DOM 节点,然后必须再次查找它。最好只是这样做: var $button = $('#btnUpdate');然后在 If 表达式中,只需使用 $button 而不是 $(button)。具有缓存jQuery对象的优点。
2赞 Ketan Savaliya 4/29/2018
这是一个简单的例子 jquerypot.com/...
432赞 user574889 1/14/2011 #5

如何确定切换元素的状态?


可以使用 和 选择器确定元素是否折叠。:visible:hidden

var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');

如果只是根据元素的可见性对元素执行操作,则可以在选择器表达式中包含 或。例如::visible:hidden

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');

评论

6赞 jazzcat 5/8/2017
想知道为什么没有答案提到元素从可见窗口中移开的情况,例如......猜猜这是一个边缘情况top:-1000px
591赞 aaronLile 3/25/2011 #6

这些答案都没有解决我所理解的问题,也就是我一直在寻找的问题,“我如何处理具有可见性的项目:隐藏两者都不会处理这个问题,因为他们都在根据文档寻找显示。据我所知,没有选择器来处理CSS可见性。这是我解决它的方法(标准的jQuery选择器,可能有更浓缩的语法)::visible:hidden

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});

评论

23赞 MarioDS 5/12/2013
从字面上看,这个答案很好处理,但问题是.使用 jQuery 意味着:属性。visibilityHow you would test if an element has been hidden or shown using jQuery?display
13赞 awe 10/16/2013
具有 或 的元素被认为是可见的,因为它们仍然会占用布局中的空间。参见 Pedro Rainho 的回答和选择器上的 jQuery 文档visibility: hiddenopacity: 0:visible
10赞 vsync 4/23/2014
你需要遍历 DOM 来检查节点的父节点,否则,这是没有用的。
237赞 Abiy 7/7/2011 #7

这对我有用,我正在使用 并使我的 div 隐藏/可见:show()hide()

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}
271赞 Pedro Rainho 11/25/2011 #8

根据 jQuery 文档的选择器::visible

  • 它们的 CSS 值为 。displaynone
  • 它们是带有 的表单元素。type="hidden"
  • 它们的宽度和高度显式设置为 0。
  • 上级元素是隐藏的,因此该元素不会显示在页面上。

具有 或 的元素被认为是可见的,因为它们仍然会占用布局中的空间。visibility: hiddenopacity: 0

这在某些情况下很有用,而在其他情况下则毫无用处,因为如果你想检查元素是否可见(),忽略父级可见性,你会发现这样做不仅更快,而且还会正确返回可见性检查。display != none.css("display") == 'none'

如果要检查可见性而不是显示,则应使用:。.css("visibility") == "hidden"

还要考虑其他 jQuery 注释

由于是 jQuery 扩展,而不是 CSS 规范的一部分,因此使用查询无法利用本机 DOM 方法提供的性能提升。要在用于选择元素时获得最佳性能,请首先使用纯 CSS 选择器选择元素,然后使用 .:visible:visiblequerySelectorAll():visible.filter(":visible")

另外,如果您担心性能,您应该检查现在你看到我...显示/隐藏性能 (2010-05-04).并使用其他方法来显示和隐藏元素。

180赞 David Levin 2/4/2012 #9

我会使用CSS类。.hide { display: none!important; }

对于隐藏/展示,我打电话给.为了检查可见性,我使用 ..addClass("hide")/.removeClass("hide").hasClass("hide")

如果您不打算使用或方法,这是一种简单明了的检查/隐藏/显示元素的方法。.toggle().animate()

评论

13赞 nbrooks 9/26/2012
.hasClass('hide')不检查父级的祖先是否被隐藏(这也将使其隐藏)。您可以通过检查是否来使其正常工作,但为什么要重新发明轮子呢?.closest('.hide').length > 0
2赞 David Levin 12/2/2012
如果元素在 html 上可见,则您建议的变体返回,如果元素被您的 javascript 代码/视图引擎直接隐藏,我的变体返回。如果您知道父元素永远不应该被隐藏 - 请使用 .hasClass() 来更严格并防止将来出现错误。如果您不仅要检查可见性,还要检查元素状态集 - 也使用 .hasClass()。在其他情况下,.closest() 更好。
134赞 Lucas 4/22/2012 #10

你应该考虑的另一个答案是,如果你隐藏了一个元素,你应该使用jQuery,但不是实际隐藏它,而是删除整个元素,但你将其HTML内容和标签本身复制到jQuery变量中,然后你需要做的就是测试屏幕上是否有这样的标签, 使用普通的 .if (!$('#thetagname').length)

241赞 webvitaly 4/25/2012 #11

元素可见性和 jQuery 的工作原理;

元素可以用 或 隐藏。这些方法之间的区别:display:nonevisibility:hiddenopacity:0

  • display:none隐藏元素,不占用任何空间;
  • visibility:hidden隐藏元素,但它仍然占用布局中的空间;
  • opacity:0将元素隐藏为“visibility:hidden”,它仍然占用布局中的空间;唯一的区别是,不透明度允许使元素部分透明;

    if ($('.target').is(':hidden')) {
      $('.target').show();
    } else {
      $('.target').hide();
    }
    if ($('.target').is(':visible')) {
      $('.target').hide();
    } else {
      $('.target').show();
    }
    
    if ($('.target-visibility').css('visibility') == 'hidden') {
      $('.target-visibility').css({
        visibility: "visible",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        visibility: "hidden",
        display: ""
      });
    }
    
    if ($('.target-visibility').css('opacity') == "0") {
      $('.target-visibility').css({
        opacity: "1",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        opacity: "0",
        display: ""
      });
    }
    

    有用的 jQuery 切换方法:

    $('.click').click(function() {
      $('.target').toggle();
    });
    
    $('.click').click(function() {
      $('.target').slideToggle();
    });
    
    $('.click').click(function() {
      $('.target').fadeToggle();
    });
    

评论

22赞 urraka 6/30/2012
和之间的另一个区别是,该元素仍将使用 .我学会了为文件上传制作自定义按钮的技巧。visibility:hiddenopacity:0opacity:0
3赞 YangombiUmpakati 12/12/2017
此外,如果您使用 opacity:0 隐藏输入,它仍然会使用 Tab 键被选中
146赞 ScoRpion 5/23/2012 #12

可以简单地使用 or 属性,例如:hiddenvisible

$('element:hidden')
$('element:visible')

或者您可以将其简化为如下所示。

$(element).is(":visible")
148赞 Vaishu 6/13/2012 #13

ebdiv应设置为 。它适用于显示和隐藏:style="display:none;"

$(document).ready(function(){
    $("#eb").click(function(){
        $("#ebdiv").toggle();
    });    
});
184赞 Matt Brock 7/17/2012 #14

您也可以使用纯 JavaScript 执行此操作:

function isRendered(domObj) {
    if ((domObj.nodeType != 1) || (domObj == document.body)) {
        return true;
    }
    if (domObj.currentStyle && domObj.currentStyle["display"] != "none" && domObj.currentStyle["visibility"] != "hidden") {
        return isRendered(domObj.parentNode);
    } else if (window.getComputedStyle) {
        var cs = document.defaultView.getComputedStyle(domObj, null);
        if (cs.getPropertyValue("display") != "none" && cs.getPropertyValue("visibility") != "hidden") {
            return isRendered(domObj.parentNode);
        }
    }
    return false;
}

笔记:

  1. 无处不在

  2. 适用于嵌套元素

  3. 适用于 CSS 和内联样式

  4. 不需要框架

评论

7赞 alex 9/20/2012
工作方式与jQuery略有不同;它被认为是可见的。visibility: hidden
5赞 Matt Brock 9/26/2012
更改上面的代码以模仿(可以说是愚蠢的)jQuery行为很容易。函数 isRendered(o){if((o.nodeType!=1)||(o==document.body)){返回 true;if(o.currentStyle&&o.currentStyle[“display”]!=“none”){return isRendered(o.parentNode);}else if(window.getComputedStyle){if(document.defaultView.getComputedStyle(o, null).getPropertyValue(“display”)!=“none”){return isRendered(o.parentNode);}}返回 false;}
106赞 Maneesh Srivastava 7/20/2012 #15
expect($("#message_div").css("display")).toBe("none");
158赞 Code Spy 1/25/2013 #16

演示链接

$('#clickme').click(function() {
  $('#book').toggle('slow', function() {
    // Animation complete.
    alert($('#book').is(":visible")); //<--- TRUE if Visible False if Hidden
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="clickme">
  Click here
</div>
<img id="book" src="https://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png" alt="" width="300"/>

来源(来自我的博客):

Blogger Plug n Play - jQuery 工具和小部件:如何使用 jQuery 查看元素是隐藏还是可见

71赞 Matthias Wegtun 6/4/2013 #17

要检查它是否不可见,我使用:!

if ( !$('#book').is(':visible')) {
    alert('#book is not visible')
}

或者下面也是 sam,将 jQuery 选择器保存在变量中,以便在多次需要时具有更好的性能:

var $book = $('#book')

if(!$book.is(':visible')) {
    alert('#book is not visible')
}

评论

2赞 Ilia Ross 6/21/2013
您是如何确定在变量中保存选择器真的更快的?
4赞 Matthias Wegtun 6/21/2013
嗨,@Ilia罗斯托夫采夫 jsperf.com/caching-jquery-selectors 在那里,您可以运行测试。无论如何,最好将其缓存起来,以便可以更快地访问它
3赞 Kenneth P. 8/26/2013
如果要在整个过程中使用单个变量,而不是调用和调用同一对象,则此方法适用。
66赞 Ross Brasseaux 7/19/2013 #18

使用类切换,而不是样式编辑。 .

使用指定用于“隐藏”元素的类很容易,也是最有效的方法之一。将类切换为“隐藏”的样式为“无”将比直接编辑该样式的执行速度更快。我在 Stack Overflow 问题中非常彻底地解释了其中的一些内容:将两个元素在同一个 div 中可见/隐藏Display


JavaScript 最佳实践和优化

以下是 Google 前端工程师 Nicholas Zakas 的 Google Tech Talk 视频,内容非常有启发性:

89赞 Irfan DANISH 10/28/2013 #19

$(document).ready(function() {
  if ($("#checkme:hidden").length) {
    console.log('Hidden');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="checkme" class="product" style="display:none">
  <span class="itemlist"><!-- Shows Results for Fish --></span> Category:Fish
  <br>Product: Salmon Atlantic
  <br>Specie: Salmo salar
  <br>Form: Steaks
</div>

35赞 cssimsek 11/6/2013 #20

此外,这里还有一个三元条件表达式,用于检查元素的状态,然后切换它:

$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });

评论

4赞 nbrooks 12/25/2013
或者,y'kno,只是摆脱整个条件并说......$('elementToToggle').toggle('slow');:)
34赞 Gaurav 11/15/2013 #21
if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}
56赞 Premshankar Tiwari 1/31/2014 #22

您需要同时检查两者。显示和可见性:

var $this = $(this)
if ($this.css("display") == "none" || $this.css("visibility") == "hidden") {
    // The element is not visible
} else {
    // The element is visible
}

如果我们检查 ,jQuery会自动检查这两件事。$this.is(":visible")

40赞 Andron 3/19/2014 #23

因为(如jQuery :visible Selector所述) - 我们可以以这种方式检查元素是否真的可见:Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout

function isElementReallyHidden (el) {
    return $(el).is(":hidden") || $(el).css("visibility") == "hidden" || $(el).css('opacity') == 0;
}

var booElementReallyShowed = !isElementReallyHidden(someEl);
$(someEl).parents().each(function () {
    if (isElementReallyHidden(this)) {
        booElementReallyShowed = false;
    }
});
66赞 Aleko 4/10/2014 #24

毕竟,没有一个例子适合我,所以我写了自己的例子。

测试(不支持 Internet Explorer):filter:alpha

a) 检查文档是否未隐藏

b) 检查元素的宽度/高度/不透明度或/内联样式是否为零display:nonevisibility:hidden

c) 检查元素的中心(也是因为它比测试每个像素/角都快)是否没有被其他元素(以及所有祖先,例如:/滚动/一个元素覆盖另一个元素)或屏幕边缘隐藏overflow:hidden

d) 检查元素是否具有零宽度/高度/不透明度或/可见性:隐藏在计算样式中(在所有祖先中)display:none

测试于

Android 4.4(本机浏览器/Chrome/Firefox)、Firefox(Windows/Mac)、Chrome(Windows/Mac)、Opera(Windows Presto/Mac WebKit)、Internet Explorer(Internet Explorer 5-11 文档模式 + 虚拟机上的 Internet Explorer 8)和 Safari(Windows/Mac/iOS)。

var is_visible = (function () {
    var x = window.pageXOffset ? window.pageXOffset + window.innerWidth - 1 : 0,
        y = window.pageYOffset ? window.pageYOffset + window.innerHeight - 1 : 0,
        relative = !!((!x && !y) || !document.elementFromPoint(x, y));
        function inside(child, parent) {
            while(child){
                if (child === parent) return true;
                child = child.parentNode;
            }
        return false;
    };
    return function (elem) {
        if (
            document.hidden ||
            elem.offsetWidth==0 ||
            elem.offsetHeight==0 ||
            elem.style.visibility=='hidden' ||
            elem.style.display=='none' ||
            elem.style.opacity===0
        ) return false;
        var rect = elem.getBoundingClientRect();
        if (relative) {
            if (!inside(document.elementFromPoint(rect.left + elem.offsetWidth/2, rect.top + elem.offsetHeight/2),elem)) return false;
        } else if (
            !inside(document.elementFromPoint(rect.left + elem.offsetWidth/2 + window.pageXOffset, rect.top + elem.offsetHeight/2 + window.pageYOffset), elem) ||
            (
                rect.top + elem.offsetHeight/2 < 0 ||
                rect.left + elem.offsetWidth/2 < 0 ||
                rect.bottom - elem.offsetHeight/2 > (window.innerHeight || document.documentElement.clientHeight) ||
                rect.right - elem.offsetWidth/2 > (window.innerWidth || document.documentElement.clientWidth)
            )
        ) return false;
        if (window.getComputedStyle || elem.currentStyle) {
            var el = elem,
                comp = null;
            while (el) {
                if (el === document) {break;} else if(!el.parentNode) return false;
                comp = window.getComputedStyle ? window.getComputedStyle(el, null) : el.currentStyle;
                if (comp && (comp.visibility=='hidden' || comp.display == 'none' || (typeof comp.opacity !=='undefined' && comp.opacity != 1))) return false;
                el = el.parentNode;
            }
        }
        return true;
    }
})();

如何使用:

is_visible(elem) // boolean
31赞 Kareem 4/12/2014 #25
.is(":not(':hidden')") /*if shown*/

评论

1赞 Kareem 9/1/2015
因为 :not(':hidden') 与 is(':visible') 不同。“Visible”适用于css“opacity”,不适用于JQuery“show()/hide()”。另外,没有额外的报价。每个集合都在这个小代码中发挥作用。
1赞 iCollect.it Ltd 9/1/2015
1)检查CSS元素和祖先的可见性,而不仅仅是您现在建议的。2) 如果伪选择器仅包含字母数字(例如 与(只是快一点)和 3) 如果你不能接受你有时实际上可能是不正确的,你将如何变得更好?:):visible:hiddendisplay: none::not(:hidden)not(':hidden')
117赞 conceptdeluxe 5/6/2014 #26

在jQuery中针对选择器测试元素时,应考虑绝对定位的元素可能被识别为隐藏,尽管其子元素是可见的:hidden

首先,这似乎有点违反直觉 - 尽管仔细查看jQuery文档会提供相关信息:

元素可以被认为是隐藏的,原因有几个:[...]它们的宽度和高度显式设置为 0。[...]

因此,对于元素的盒子模型和计算样式而言,这实际上是有意义的。即使宽度和高度未式设置为 0,也可以隐式设置它们。

请看以下示例:

console.log($('.foo').is(':hidden')); // true
console.log($('.bar').is(':hidden')); // false
.foo {
  position: absolute;
  left: 10px;
  top: 10px;
  background: #ff0000;
}

.bar {
  position: absolute;
  left: 10px;
  top: 10px;
  width: 20px;
  height: 20px;
  background: #0000ff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">
  <div class="bar"></div>
</div>


jQuery 3.x 更新:

使用 jQuery 3 时,所描述的行为将发生变化!如果元素具有任何布局框(包括宽度和/或高度为零的布局框),则这些元素将被视为可见。

使用 jQuery 3.0.0-alpha1 的 JSFiddle:

http://jsfiddle.net/pM2q3/7/

然后,相同的 JavaScript 代码将具有以下输出:

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false
43赞 pixellabme 8/11/2014 #27

只需通过检查布尔值来检查可见性,例如:

if (this.hidden === false) {
    // Your code
}

我为每个函数使用了这段代码。否则,您可以使用它来检查元素的可见性。is(':visible')

38赞 RN Kushwaha 8/24/2014 #28

但是,如果元素的 CSS 如下所示呢?

.element{
    position: absolute;left:-9999;    
}

因此,还应该考虑 Stack Overflow 问题的答案:如何检查元素是否在屏幕外

36赞 V31 8/30/2014 #29

可以创建一个函数来检查可见性/显示属性,以衡量元素是否显示在 UI 中。

function checkUIElementVisible(element) {
    return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}

工作小提琴

56赞 Mathias Stavrou 4/7/2015 #30

$(document).ready(function() {
   var visible = $('#tElement').is(':visible');

   if(visible) {
      alert("visible");
                    // Code
   }
   else
   {
      alert("hidden");
   }
});
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

<input type="text" id="tElement" style="display:block;">Firstname</input>

63赞 Roman Losev 4/27/2015 #31

激活了对广告拦截器使用可见检查的示例:

$(document).ready(function(){
  if(!$("#ablockercheck").is(":visible"))
    $("#ablockermsg").text("Please disable adblocker.").show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

“ablockercheck”是广告拦截器拦截的 ID。因此,检查它是否可见,您可以检测广告拦截器是否已打开。

23赞 Prabhagaran 8/18/2015 #32
if($('#id_element').is(":visible")){
   alert('shown');
}else{
   alert('hidden');
}
12赞 Sangeet Shah 8/24/2015 #33

这是检查标签是否可见的一些选项

 // using a pure CSS selector  
   if ($('p:visible')) {  
      alert('Paragraphs are visible (checked using a CSS selector) !');  
   };  
  
   // using jQuery's is() method  
   if ($('p').is(':visible')) {  
      alert('Paragraphs are visible (checked using is() method)!');  
   };  
  
   // using jQuery's filter() method  
   if ($('p').filter(':visible')) {  
      alert('Paragraphs are visible (checked using filter() method)!');  
   };  
  
   // you can use :hidden instead of :visible to reverse the logic and check if an element is hidden  
   // if ($('p:hidden')) {  
   //    do something  
   // };  

3赞 cbertelegni 3/23/2016 #34
if($("h1").is(":hidden")){
    // your code..
}
12赞 Disapamok 4/4/2016 #35

当类可见时,您可以只添加该类。添加类 .然后检查它是否有一个类:show

$('#elementId').hasClass('show');

如果您有该类,则返回 true。show

像这样添加 CSS:

.show{ display: block; }
17赞 Oriol 4/12/2016 #36

这就是jQuery在内部解决这个问题的方式:

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

如果你不使用 jQuery,你可以利用这段代码并将其转换为你自己的函数:

function isVisible(elem) {
    return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};

只要元素可见,它就会返回。isVisibletrue

17赞 Abrar Jahin 5/2/2016 #37

您可以使用以下命令:

$(element).is(':visible');

示例代码

$(document).ready(function()
{
    $("#toggle").click(function()
    {
        $("#content").toggle();
    });

    $("#visiblity").click(function()
    {
       if( $('#content').is(':visible') )
       {
          alert("visible"); // Put your code for visibility
       }
       else
       {
          alert("hidden");
       }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>

<p id="content">This is a Content</p>

<button id="toggle">Toggle Content Visibility</button>
<button id="visibility">Check Visibility</button>

21赞 lmcDevloper 6/1/2016 #38

我搜索了这个,没有一个答案适合我的情况,所以我创建了一个函数,如果一个人的眼睛看不到该元素,它将返回 false

jQuery.fn.extend({
  isvisible: function() {
    //
    //  This function call this: $("div").isvisible()
    //  Return true if the element is visible
    //  Return false if the element is not visible for our eyes
    //
    if ( $(this).css('display') == 'none' ){
        console.log("this = " + "display:none");
        return false;
    }
    else if( $(this).css('visibility') == 'hidden' ){
        console.log("this = " + "visibility:hidden");   
        return false;
    }
    else if( $(this).css('opacity') == '0' ){
        console.log("this = " + "opacity:0");
        return false;
    }   
    else{
        console.log("this = " + "Is Visible");
        return true;
    }
  }  
});

评论

0赞 Ninjanoel 12/8/2016
请注意,如果选择器返回一组空的项目,此方法将返回 true,因此如果您要查找不可见的项目,请先检查长度:var items = jQuery('.selector'); if (items.length == 0 || !items.isVisible()) { alert('item is not visible'); }
0赞 Questionnaire 2/24/2020
隐藏在其他物品下方的元素呢?
21赞 No one 11/5/2016 #39

As ,并将内联 css(display:none 或 display:block)附加到元素。 同样,我们可以很容易地使用三元运算符,通过检查显示 CSS 来检查元素是隐藏的还是可见的。hide()show()toggle()

更新:

  • 您还需要检查元素 CSS 是否设置为 visibility: “visible” 或 visibility: “hidden”
  • 如果 display 属性设置为 inline-block、block、flex,则该元素也将可见。

因此,我们可以检查使其不可见的元素的属性。所以他们是和display: nonevisibility: "hidden";

我们可以创建一个对象来检查负责隐藏元素的属性:

var hiddenCssProps = {
display: "none",
visibility: "hidden"
}

如果键的元素属性与隐藏属性值匹配,我们可以通过遍历对象匹配中的每个键值来检查。

var isHidden = false;
for(key in hiddenCssProps) {
  if($('#element').css(key) == hiddenCssProps[key]) {
     isHidden = true;
   }
}

如果要检查元素 height: 0 或 width: 0 或更多等属性,可以扩展此对象并向其添加更多属性,并且可以检查。

12赞 Wolfack 12/1/2016 #40
$( "div:visible" ).click(function() {
  $( this ).css( "background", "yellow" );
});
$( "button" ).click(function() {
  $( "div:hidden" ).show( "fast" );
});

API 文档:可见选择器

15赞 Sky Yip 12/6/2016 #41

我只想澄清一下,在jQuery中,

由于以下几个原因,可以认为元素是隐藏的:

  • 它们的 CSS 显示值为 none。
  • 它们是 type=“hidden” 的表单元素。
  • 它们的宽度和高度显式设置为 0。
  • 上级元素是隐藏的,因此该元素不会显示在页面上。

可见性为:隐藏或不透明度:0 的元素被视为可见,因为它们仍会占用布局中的空间。在隐藏元素的动画期间,该元素被视为可见,直到动画结束。

来源: :hidden Selector | jQuery API 文档

if($('.element').is(':hidden')) {
  // Do something
}
18赞 Arun Karnawat 12/13/2016 #42

有很多方法可以检查元素在jQuery中是可见还是隐藏。

示例 HTML 示例参考

<div id="content">Content</div>
<div id="content2" style="display:none">Content2</div>

使用可见性过滤器选择器 $('element:hidden') 或 $('element:visible')

  • $('element:hidden'):选择所有隐藏的元素。

    Example:
       $('#content2:hidden').show();
    
  • $('element:visible'):选择所有可见的元素。

    Example:
       $('#content:visible').css('color', '#EEE');
    

http://api.jquery.com/category/selectors/visibility-filter-selectors/ 阅读更多内容

使用 is() 过滤

    Example:
       $('#content').is(":visible").css('color', '#EEE');

    Or checking condition
    if ($('#content').is(":visible")) {
         // Perform action
    }

http://api.jquery.com/is/ 阅读更多内容

9赞 Abdul Aziz Al Basyir 3/20/2017 #43

检查隐藏元素的方法太多了。这是最好的选择(我只是推荐你):

使用jQuery,在CSS中创建一个元素“display:none”,用于隐藏。

关键是:

$('element:visible')

以及一个使用示例:

$('element:visible').show();
5赞 Peter Wone 3/25/2017 #44

公平地说,这个问题早于这个答案。

我添加它不是为了批评 OP,而是为了帮助任何仍在问这个问题的人。

确定某些内容是否可见的正确方法是查阅视图模型;

如果你不知道这意味着什么,那么你即将踏上一段发现之旅,这将使你的工作变得不那么困难。

下面概述了模型-视图-视图-模型体系结构 (MVVM)。

KnockoutJS 是一个绑定库,可让您在不学习整个框架的情况下尝试这些东西。

这里有一些 JavaScript 代码和一个 DIV,它们可能可见,也可能不可见。

<html>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.1/knockout-min.js"></script>
<script>
    var vm = {
        IsDivVisible: ko.observable(true);
    }
    vm.toggle = function(data, event) {
      // Get current visibility state for the div
      var x = IsDivVisible();
      // Set it to the opposite
      IsDivVisible(!x);
    }
    ko.applyBinding(vm);
</script>
<div data-bind="visible: IsDivVisible">Peekaboo!</div>
<button data-bind="click: toggle">Toggle the div's visibility</button>
</body>
</html>

请注意,toggle 函数不会查询 DOM 来确定 div 的可见性;它咨询视图模型。

0赞 user6119825 4/29/2017 #45
$("someElement").on("click", function () {
    $("elementToToggle").is(":visible");
});

评论

0赞 Tyler2P 6/27/2023
通过添加有关代码的作用以及它如何帮助 OP 的更多信息,可以改进您的答案。
20赞 Alireza 5/6/2017 #46

只需检查该元素是否可见,它就会返回一个布尔值。jQuery通过向元素添加display none来隐藏元素,因此,如果要使用纯JavaScript,仍然可以这样做,例如:

if (document.getElementById("element").style.display === 'block') {
  // Your element is visible; do whatever you'd like
}

此外,您可以使用jQuery,因为似乎您的其余代码正在使用它,并且您的代码块较小。jQuery中的类似以下内容可以为您完成相同的操作:

if ($(element).is(":visible")) {
    // Your element is visible, do whatever you'd like
};

在jQuery中使用该方法也会导致相同的结果:css

if ($(element).css('display') === 'block') {
    // Your element is visible, do whatever you'd like
}

此外,在检查可见性和显示的情况下,您可以执行以下操作:

if ($(this).css("display") === "block" || $(this).css("visibility") === "visible") {
   // Your element is visible, do whatever you'd like
}
9赞 Antoine Auffray 8/9/2017 #47

只需检查属性(或取决于您喜欢的隐身类型)。例:displayvisibility

if ($('#invisible').css('display') == 'none') {
    // This means the HTML element with ID 'invisible' has its 'display' attribute set to 'none'
}
4赞 Disapamok 9/26/2017 #48

您可以通过切换类来使用可见或隐藏的 CSS 类:

.show{ display :block; }

设置 jQuery 或 或 .toggleClass()addClass()removeClass();

举个例子,

jQuery('#myID').toggleClass('show')

上面的代码将在元素没有时添加 css 类,并在有类时删除。showshowshow

当你检查它是否可见时,你可以按照这个jQuery代码,

jQuery('#myID').hasClass('show');

当元素有我们的类 () 时,上面的代码将返回布尔值 (true),当它没有 () 类时,将返回 false。#myIDshowshow

5赞 user8903269 12/23/2017 #49
isHidden = function(element){
    return (element.style.display === "none");
};

if(isHidden($("element")) == true){
    // Something
}
1赞 user10145552 7/30/2018 #50

与其为每一个人写一个,不如这样做:eventelement

$('div').each(function(){
  if($(this).css('display') === 'none'){
    $(this).css({'display':'block'});
  }
});

您也可以在输入上使用它:

$('input').each(function(){
  if($(this).attr('type') === 'hidden'){
    $(this).attr('type', 'text');
  }
});
6赞 Profesor08 8/15/2018 #51

如果要检查某个元素在页面上是否可见,则可以检查该元素是否都等于 ,具体取决于其父元素的可见性。widthheight0

jQuery的

$element.width() === 0 && $element.height() === 0

香草

element.clientWidth === 0 && element.clientHeight === 0

element.offsetWidth === 0 && element.offsetHeight === 0

6赞 Muhammad 9/12/2018 #52

一个jQuery解决方案,但对于那些想要更改按钮文本的人来说,它仍然更好一些:

$(function(){
  $("#showHide").click(function(){
    var btn = $(this);
    $("#content").toggle(function () {
      btn.text($(this).css("display") === 'none' ? "Show" : "Hide");
    });
   });
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="showHide">Hide</button>
<div id="content">
  <h2>Some content</h2>
  <p>
  What is Lorem Ipsum? Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
  </p>
</div>

13赞 L Y E S - C H I O U K H 10/10/2018 #53

1 • jQuery 解决方案

确定元素在jQuery中是否可见的方法

<script>
if ($("#myelement").is(":visible")){alert ("#myelement is visible");}
if ($("#myelement").is(":hidden")){alert ("#myelement is hidden"); }
</script>

循环 id 'myelement' 元素的所有可见 div 子项:

$("#myelement div:visible").each( function() {
 //Do something
});

窥视jQuery的源代码

jQuery是这样实现这个特性的:

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

2 • 如何检查元素是否在屏幕外 - CSS

使用 Element.getBoundingClientRect(),您可以轻松检测元素是否在视口的边界内(即屏幕内或屏幕外):

jQuery.expr.filters.offscreen = function(el) {
  var rect = el.getBoundingClientRect();
  return (
           (rect.x + rect.width) < 0 
             || (rect.y + rect.height) < 0
             || (rect.x > window.innerWidth || rect.y > window.innerHeight)
         );
};

然后,您可以通过多种方式使用它:

// Returns all elements that are offscreen
$(':offscreen');

// Boolean returned if element is offscreen
$('div').is(':offscreen');

如果您使用 Angular,请检查: 不要在 Angular 中使用隐藏属性

2赞 Kamil Kiełczewski 6/12/2019 #54
content.style.display != 'none'

function toggle() {
  $(content).toggle();
  let visible= content.style.display != 'none'
  console.log('visible:', visible);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button onclick="toggle()">Show/hide</button>
<div id="content">ABC</div>

3赞 Aravinda Meewalaarachchi 7/18/2019 #55

您可以使用jQuery的函数来检查所选元素的可见或隐藏。此方法沿 DOM 元素遍历以查找匹配项,该匹配项满足传递的参数。如果存在匹配项,它将返回 true,否则返回 false。is()

<script>
    ($("#myelement").is(":visible"))? alert("#myelement is visible") : alert("#myelement is hidden");
</script>
3赞 Swift 12/10/2019 #56

下面的代码检查元素在jQuery中是隐藏的还是可见的:

$("button").click(function () {
    // show hide paragraph on button click
    $("p").toggle("slow", function () {
        // check paragraph once toggle effect is completed
        if ($("p").is(":visible")) {
            alert("The paragraph  is visible.");
        } else {
            alert("The paragraph  is hidden.");
        }
    });
});
6赞 Brane 2/16/2020 #57

扩展功能,用于检查元素是否可见、不显示,甚至不透明度级别

如果元素不可见,则返回。false

function checkVisible(e) {
    if (!(e instanceof Element)) throw Error('not an Element');
    const elementStyle = getComputedStyle(e);
    if (elementStyle.display === 'none' || elementStyle.visibility !== 'visible' || elementStyle.opacity < 0.1) return false;
    if (e.offsetWidth + e.offsetHeight + e.getBoundingClientRect().height +
        e.getBoundingClientRect().width === 0) {
        return false;
    }
    const elemCenter   = {
        x: e.getBoundingClientRect().left + e.offsetWidth / 2,
        y: e.getBoundingClientRect().top + e.offsetHeight / 2
    };
    if (elemCenter.x < 0 || elemCenter.y < 0) return false;
    if (elemCenter.x > (document.documentElement.clientWidth || window.innerWidth)) return false;
    if (elemCenter.y > (document.documentElement.clientHeight || window.innerHeight)) return false;
    let pointContainer = document.elementFromPoint(elemCenter.x, elemCenter.y);
    do {
        if (pointContainer === e) return true;
    } while (pointContainer = pointContainer.parentNode);
    return false;
}
2赞 Mojtaba Nava 9/2/2020 #58
   hideShow(){
  $("#accordionZiarat").hide();
  // Checks CSS content for display:[none|block], ignores visibility:[true|false]
  if ($("#accordionZiarat").is(":visible")) {
    $("#accordionZiarat").hide();
  }

  
  else if ($("#accordionZiarat").is(":hidden")) {
    $("#accordionZiarat").show();
  }

  else{

  }
7赞 Hasee Amarathunga 9/23/2020 #59

使用隐藏选择,您可以匹配所有隐藏元素

$('element:hidden')

使用“可见”选择,您可以匹配所有可见元素

$('element:visible')
0赞 video-reviews.net 1/22/2021 #60
if ($(element).is(":visible")) {
    console.log("element is visible");
} else {
    console.log("element is not visible");
}

评论

0赞 Tyler2P 6/27/2023
通过添加有关代码的作用以及它如何帮助 OP 的更多信息,可以改进您的答案。
7赞 Vicky P 12/21/2021 #61

有两种方法可以检查元素的可见性。

解决方案#1

if($('.selector').is(':visible')){
    // element is visible
}else{
    // element is hidden
}

解决方案#2

if($('.selector:visible')){
    // element is visible
}else{
    // element is hidden
}
-5赞 udorb b 12/24/2021 #62

如果您使用的是 Bootstrap,则可以使用 class 隐藏任何元素。d-none

if (!$("#ele").hasClass("d-none")) {
    $("#ele").addClass("d-none"); //hide
}

评论

0赞 JJ Shaw 7/27/2022
仅当您使用 Bootsrap 时,才会这样做
2赞 Enrico König 1/5/2022 #63

这个问题最简单的答案是:

function checkUIElementVisible(element) {
    return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}
8赞 Sahil Thummar 5/4/2022 #64

使用任何可见选择器或隐藏选择器来检查可见性:

  1. 使用 :visible 选择器 - jQuery( “:visible” )
  2. 使用 :hidden 选择器 - jQuery( “:hidden” )

use .toggle() - 显示和隐藏元素

function checkVisibility() {
    // check if element is hidden or not and return true false
    console.log($('#element').is(':hidden'));

    // check if element is visible or not and return true false
    console.log($('#element').is(':visible'));

    if ( $('#element').css('display') == 'none' || $('#element').css("visibility") == "hidden"){
        console.log('element is hidden');
    } else {
        console.log('element is visibile');
    }
}

checkVisibility()
$('#toggle').click(function() {
    $('#element').toggle()
    checkVisibility()
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id='toggle'>Toggle</button>
<div style='display:none' id='element'>
    <h1>Hello</h1>
    <p>it's visible</p>
</div>

1赞 user17087887 6/27/2022 #65

你可以试试这个:

$(document).ready(function () {
    var view = $(this).is(":visible");
    if (view) {
        alert("view");
        // Code
    } else {
        alert("hidden");
    }
});

评论

0赞 Hayden Thring 11/2/2023
if(content.not(“:visible”).length){