如何检查jQuery中是否隐藏了一个元素?

Philip Morton 7096 javascript jquery dom visibility

是可能的切换元件的可见性,使用函数.hide(),.show().toggle().

如何测试元素是可见还是隐藏?

Tsvetomir Ts.. 8738

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

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

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

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

  • 这个解决方案似乎会鼓励`visible = false`和`display:none`; 而Mote的解决方案显然使编码人员意图检查`display:none`; (通过提及隐藏和显示控制`display:none`不是`visible = true`) (139认同)
  • 这是正确的,但``visible`也将检查父元素是否可见,正如chiborg指出的那样. (79认同)
  • 我实际上发现反向逻辑词更好:!$('selector').is(':hidden'); 由于某些原因.值得一试. (42认同)
  • 你有一点 - 我会清楚地表明代码只检查`display`属性.鉴于原始问题是`show()`和`hide()`,并且他们设置`display`,我的答案是正确的.顺便说一下,它与IE7一起工作,这是一个测试片段 - http://jsfiddle.net/MWZss/; (36认同)
  • 这是一个简单的基准测试,是针对regexp的:http://jsperf.com/jquery-is-vs-regexp-for-css-visibility.结论:如果你想要表现,请使用regexp over is()(因为is()在查看实际元素之前首先查找所有隐藏节点). (12认同)

twernt.. 1339

您可以使用hidden选择器:

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

visible选择器:

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

  • 当你处理几个元素并且很少发生时 - 即案件的绝对绝对多数 - 时间问题是一个非常小的问题.哦,不!花了42毫秒而不是19毫秒! (91认同)
  • 请注意,本演示文稿中有一些与性能相关的提示:http://addyosmani.com/jqprovenperformance/ (55认同)
  • 在第21页到第28页,它显示了缓慢:隐藏或:可见与其他选择器的比较.谢谢你的指点. (18认同)
  • 我正在使用这个选择器来切换元素.$('element:hidden')对我来说总是如此! (10认同)
  • @cwingrav您可能想要重新阅读文档,:hidden适用于所有元素.带有`type ="hidden"`的表单元素只是一个可以触发的情况:隐藏.没有高度和宽度的元素,带有`display:none`的元素和带有隐藏祖先的元素也将符合:hidden. (9认同)
  • @vbullinger 42ms实际上比我想等待网站响应我的行为要长一点 - 这意味着大约3帧的动画下降/延迟只有60 fps (4认同)
  • 链接页面上的嵌入式演示文稿不再有效,请转至http://slideshare.net/AddyOsmani/jquery-proven-performance-tips-tricks/. (3认同)
  • @vbullinger任何超过16ms的处理开始丢弃FPS.所以,是的,如果它需要42毫秒,如果你对性能感兴趣,这可能是一个糟糕的交易. (2认同)

Mote.. 850

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不是.但是在许多情况下,上述内容可能很有用,尤其是当您需要查找隐藏父级中是否存在任何可见的错误div时,因为在这种情况下:visible不起作用.

  • 这仅检查单个元素的显示属性.:visible属性还检查父元素的可见性. (121认同)
  • @chiborg是的,但有时这就是你想要的,我必须学习"聪明"的jQuery是多么的艰难... (14认同)
  • 这是使用IE 8进行测试时唯一有效的解决方案. (12认同)
  • 这确实回答了问题,问题是关于单个元素并使用`hide()`,`show()`和`toggle()`函数,但是,正如大多数人已经说过的那样,我们应该使用` :visible`和`:hidden`伪类. (7认同)
  • 这不是我的问题的解决方案,但该方法帮助我确定了针对我的问题检查属性的修复. (2认同)

大智慧.. 479

这些答案都没有解决我所理解的问题,这就是我正在寻找的问题,"我该如何处理有问题的物品visibility: hidden?" .既:visible不会也:hidden不会处理这个,因为他们都在寻找文档显示.据我所知,没有选择器来处理CSS可见性.以下是我如何解决它(标准的jQuery选择器,可能有更简洁的语法):

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

  • 这个答案很适合从字面上处理`visibility`,但问题是"你如何测试一个元素是否被隐藏或使用jQuery显示?".使用jQuery意味着:`display`属性. (15认同)
  • 具有`visibility:hidden`或`opacity:0`的元素被认为是可见的,因为它们仍然占用布局中的空间.参见[Pedro Rainho**的答案](http://stackoverflow.com/a/8266879/109392)和[jQuery文档](http://api.jquery.com/visible-selector)的`:可见的选择器. (8认同)
  • 你需要遍历DOM来检查节点的父节点,否则,这是没用的. (8认同)
  • 如果使用.hide()隐藏元素,则无效. (4认同)

大智慧.. 349

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


您可以使用:visible:hidden选择器确定元素是否已折叠.

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

如果您只是根据其可见性对元素进行操作,则可以只包括:visible:hidden在选择器表达式中.例如:

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

  • 想知道为什么当元素从可见窗口移开时没有答案提到这种情况,比如`top:-1000px` ...猜猜它是边缘情况 (2认同)

Simon_Weaver.. 259

通常在检查某些东西是否可见时,您将立即前进并使用它做其他事情.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" });

  • 没有理由在示例中使用的代码段中提取DOM节点,然后必须再次查找它.最好只做:var $ button = $('#btnUpdate'); 然后在If表达式中只使用$按钮而不是$(按钮).具有缓存jQuery对象的优点. (21认同)

大智慧.. 211

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

  • 它们的CSS display值为none.
  • 它们是表单元素type="hidden".
  • 它们的宽度和高度显式设置为0.
  • 隐藏了一个祖先元素,因此该元素不会显示在页面上.

元素带visibility: hidden或被opacity: 0认为是可见的,因为它们仍然占用布局中的空间.

这在某些情况下很有用,而在其他情况下则无用,因为如果要检查元素是否可见(display != none),忽略父项可见性,您会发现执行.css("display") == 'none'操作不仅更快,而且还会正确返回可见性检查.

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

还要考虑其他jQuery注释:

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

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


大智慧.. 188

这对我的作品,和我使用show(),并hide()让我的DIV隐藏/可见:

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}


webvitaly.. 185

元素可见性和jQuery如何工作 ;

元素可以隐藏display:none,visibility: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();
    });
    

  • `visibility:hidden`和`opacity:0`之间的另一个区别是元素仍将使用`opacity:0`响应事件(如点击).我学会了为文件上传制作自定义按钮的技巧. (19认同)

Evgeny Levin.. 146

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

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

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

  • `.hasClass('hide')`不检查父项的祖先是否被隐藏(这也会使其隐藏).你可以通过检查`.closest('.hide').length> 0`来正确地工作,但是为什么重新发明轮子呢? (10认同)

Matt Brock.. 141

您也可以使用纯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. 不需要框架

  • 与jQuery的工作方式略有不同; 它认为`visibility:hidden`是*可见*. (5认同)
  • 更改上面的代码以模仿(可以说是愚蠢的)jQuery行为很容易.....function isRendered(o){if((o.nodeType!= 1)||(o == document.body)){return 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;} (3认同)
  • 当然,我只是为了使用它而不扫描其代码的用户的利益而添加它.:) (2认同)

ScoRpion.. 122

可以简单地使用hiddenor visible属性,例如:

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

或者你可以简化同样如下.

$(element).is(":visible")


Code Spy.. 111

演示链接

$('#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="http://www.chromefusion.com/wp-content/uploads/2012/06/chrome-logo.jpg" alt="" />

资源:

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


think123.. 110

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


Vaishu.. 109

ebdiv应该设置为style="display:none;".它适用于show和hide:

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


conceptdelux.. 85

:hidden在jQuery中针对选择器测试元素时,应该认为绝对定位元素可以被识别为隐藏,尽管它们的子元素是可见的.

这首先看起来有些违反直觉 - 虽然仔细查看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,所描述的行为将发生变化!如果元素具有任何布局框,包括零宽度和/或高度的布局框,则将其视为可见元素.

JSFiddle与jQuery 3.0.0-alpha1:

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

然后,相同的JS将具有此输出:

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false


Maneesh Kuma.. 83

这可能有效:

expect($("#message_div").css("display")).toBe("none");

  • 这是什么语言/方言/图书馆?我在JS中不熟悉这种语法... (6认同)

Irfan DANISH.. 63

例:

$(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>


Matthias Weg.. 62

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

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

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

var $book = $('#book')

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

  • 您好@Ilia Rostovtsev http://jsperf.com/caching-jquery-selectors您可以在那里运行测试.无论如何,将它缓存以便更快地访问它是件好事 (3认同)
  • 如果您想在整个过程中使用单个变量而不是调用和调用同一个对象,那么这是合适的. (2认同)

Lopsided.. 59

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

使用指定用于"隐藏"元素的类很容易,也是最有效的方法之一.使用Display'none'样式切换'hidden'类比直接编辑该样式要快.我在Stack Overflow问题中详细解释了其中的一些问题.在同一个div中转换两个元素可见/隐藏.


JavaScript最佳实践和优化

以下是Google前端工程师Nicholas Zakas撰写的Google Tech Talk的真实启发视频:


Roman Losev.. 56

激活使用adblocker 的可见检查的示例:

$(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"是adblocker阻止的ID.因此,检查它是否可见,您可以检测adblocker是否已打开.


Aleko.. 55

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

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

a)检查文档是否未隐藏

b)检查元素是否具有零宽度/高度/不透明度或display:none/ 或visibility:hidden内联样式

c)检查元素的中心(也因为它比测试每个像素/角更快)是否被其他元素(和所有祖先,例如:overflow:hidden/ scroll/one element over theother)或屏幕边缘隐藏

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


Premshankar .. 50

您需要同时检查...显示和可见性:

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

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


大智慧.. 38

也许你可以做这样的事情

$(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>


Andron.. 32

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

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;
    }
});


大智慧.. 31

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

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

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


大智慧.. 30

if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}


RN Kushwaha.. 30

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

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

所以这个Stack Overflow问题的答案也应该考虑如何检查元素是否在屏幕外.


cssimsek.. 29

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

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

  • 或者,y'kno,只是摆脱整个条件并说'$('elementToToggle').toggle('slow');`...`:)` (4认同)

V31.. 29

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

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

工作小提琴


Kareem.. 25

.is(":not(':hidden')") /*if shown*/


大智慧.. 19

我搜索了这个,并没有一个答案对我的情况是正确的,所以我创建了一个函数,如果一个人的眼睛看不到元素,它将返回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;
    }
  }  
});


Prabhagaran.. 18

if($('#id_element').is(":visible")){
   alert('shown');
}else{
   alert('hidden');
}


Oriol.. 15

这就是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 );
};

isVisible将返回true只要该元素是可见的.


No one.. 14

作为hide(),show()并将toggle()内联css(display:none或display:block)附加到元素.同样,我们可以通过检查显示css轻松使用三元运算符来检查天气元素是隐藏还是可见.

更新:

  • 您还需要检查元素css是否设置为可见性:"可见"或可见性:"隐藏"
  • 如果显示属性设置为inline-block,block,flex,则元素也将可见.

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

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

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

如果key的element属性与hidden属性值匹配,我们可以通过循环遍历对象匹配中的每个键值来检查.

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

如果要检查元素高度:0或宽度:0或更多的属性,可以扩展此对象并向其添加更多属性并进行检查.

谢谢@Krzysztof Przygoda提醒我其他展示属性.


大智慧.. 14

有很多方法可以检查元素在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/


Alireza.. 14

只需检查该元素是否可见并且它将返回一个布尔值,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
}


Abrar Jahin.. 13

你可以用这个:

$(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>


大智慧.. 11

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

 // 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  
   // };  


Sky Yip.. 10

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

元素可被视为隐藏,原因如下:

  • 它们的CSS显示值为none.
  • 它们是type ="hidden"的表单元素.
  • 它们的宽度和高度显式设置为0.
  • 隐藏了一个祖先元素,因此该元素不会显示在页面上.

具有可见性的元素:隐藏或不透明度:0被认为是可见的,因为它们仍然占用布局中的空间.在隐藏元素的动画期间,该元素在动画结束前被视为可见.

来源::隐藏选择器| jQuery API文档

if($('.element').is(':hidden')) {
  // Do something
}


Sahan.. 9

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

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

如果你有这个show类,它返回true .

像这样添加CSS:

.show{ display: block; }


Abdul Aziz A.. 7

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

使用jQuery,在CSS中创建一个元素"display:none",用于隐藏.

重点是:

$('element:visible')

以及一个使用示例:

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


Antoine Auff.. 5

只需检查display属性(或visibility根据您喜欢的隐身类型).示例:

if ($('#invisible').css('display') == 'none') {
    // This means the HTML element with ID 'invisible' has its 'display' attribute set to 'none'
}


归档时间:

查看次数:

2371060 次

最近记录:

12 月 前