jQuery检测可见但隐藏的元素

这似乎应该相当容易 – 但我找不到合适的选择器

根据文档( http://api.jquery.com/hidden-selector/和http://api.jquery.com/visible-selector/ )…

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

隐藏了一个祖先元素,因此该元素不会显示在页面上。

我想要检测的是“这个元素是可见的,但是包含在隐藏的父元素中”。 即,如果我使父母可见,这个元素也将是可见的。

如果这是你经常使用的东西,那就做个自己的选择器:)这是一个例子:

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

您可以像这样使用它,测试标记:

  

使用示例:

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

或者,您可以使用.filter()函数,如下所示:

 $('selector').filter(function() { return $(this).is(':hidden') && $(this).css('display') != 'none'; } 

jQuery现在都有这个内置function

 $("#child").closest(':hidden').length == 0 

如果它是您正在寻找的特定元素,那么您可以检查它的显示属性

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

如果它不是特定元素,那么您可以使用以下方法找到隐藏的父节点:hidden然后使用自定义函数来查找所需类型的节点。 例如

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

如果你想要一个干净的选择器,那么我认为你会失去运气,因为我不认为你想要的是CSS规范的一部分,所以不会作为jQuery中的选择器。

我不认为只有一个选择器可以工作,但是

  

应该归还你需要的东西。 如果你需要检查它的祖先而不仅仅是它的父级,你可以用一个可以递归’祖先链’的函数替换$(id).parent().is(':hidden')部分。