jQuery detect visible but hidden elements

后端 未结 3 1759
情深已故
情深已故 2020-12-29 10:17

This seems like it should be fairly easy - but I can\'t find the right selector for it

According to the docs (http://api.jquery.com/hidden-selector/ and http://api.j

相关标签:
3条回答
  • 2020-12-29 10:37

    jQuery has this all built-in nowdays

    $("#child").closest(':hidden').length == 0
    
    0 讨论(0)
  • 2020-12-29 10:39

    If it is a specific element that you are looking for then you could check it's display property

    $('#element').css('display') != 'none';
    

    If it wasn't a specific element then you could find the parent nodes that are hidden using :hidden then use a custom function to look for nodes of the type you want. E.g.

    $('parent-selector:hidden').find('node-selector').each(function(){
      if($(this).css('display') != 'none') {
        // do what you wanted
      }
    });
    

    If you want a clean selector then i think that you're going to be out of luck as i don't think what you want is part of the CSS spec, so won't be there as a selector in jQuery.

    0 讨论(0)
  • 2020-12-29 10:47

    If this is something you'll commonly use, make your own selector :) Here's an example:

    jQuery.expr[':'].hiddenByParent = function(a) { 
       return jQuery(a).is(':hidden') && jQuery(a).css('display') != 'none'; 
    };
    

    You can use it like this, test markup:

    <div style="display: none" id="parent">
      <div>
          <div id="child">Test</div>
      </div>
    </div>
    ​
    

    Examples of use:

    $("div:hiddenByParent").length;​​​​​​​​​​​​​​​​​​ // "2" (plain div + child match)
    $("#child").is(":hiddenByParent"); // true
    

    Alternatively, you can use the .filter() function like this:

    $('selector').filter(function() {
      return $(this).is(':hidden') && $(this).css('display') != 'none';
    }
    
    0 讨论(0)
提交回复
热议问题