Jquery-如何检查隐藏DIV中的子项是否可见?

Jquery-如何检查隐藏DIV中的子项是否可见?,jquery,Jquery,如何在隐藏的div中检查div。。。是否可见 HTML <div style="display:none;"> <div id="two_child"></div> <div id="three_child" style="display:none"></div> </div> 这是行不通的 有什么想法吗 提前谢谢! Peter您可以检查css的显示属性: if ($("#two_child").css("disp

如何在隐藏的div中检查div。。。是否可见

HTML

<div style="display:none;">
  <div id="two_child"></div>
  <div id="three_child" style="display:none"></div>
</div>
这是行不通的

有什么想法吗

提前谢谢!
Peter

您可以检查css的
显示属性:

if ($("#two_child").css("display") != "none") {
    //...
}
正如Gaby在评论中指出的那样,如果使用
可见性来隐藏元素,这将不起作用,因此您可能希望将其扩展到:

var $child = $("#two_child");
if ($child.css("display") != "none" && $child.css("visibility") != "hidden") {
    //...
}

因为隐藏元素的子元素总是隐藏在显示中,所以您可以尝试

$("#child_two").css("style") == "none"
这仅在使用css隐藏内容时有效。

只需返回false:-)框中找不到的项目。。。好。。。您可能丢失了带盒子的物品;-)

选择器不是这样工作的

元素被视为隐藏的原因有以下几个:

  • 它们的CSS显示值为“无”
  • 它们是具有 type=“隐藏”
  • 它们的宽度和高度 显式设置为0
  • 祖先 元素是隐藏的,因此该元素是隐藏的 未显示在页面上。

如果要检查css属性,可以创建一个自定义css选择器,如中所示,使用过滤器检查
显示
样式,

$("div")
.filter(function(){
    return $(this).css("display") == "none";
}).find("> div").filter(function() {
    return $(this).css("display") != "none";
}).length
参考


我保存了这两个选择器扩展,它们与Steve的版本基本相同:

发件人:

来自雷米·夏普和保罗·爱尔兰:

// reallyvisible - by remy sharp & paul irish
// :visible doesn't take in to account the parent's visiblity - 'reallyvisible' does...daft name, but does the job.
// not neccessary in 1.3.2+
$.expr[ ":" ].reallyvisible = function(a){ return !(jQuery(a).is(':hidden') || jQuery(a).parents(':hidden').length); };

隐藏分区中的孩子怎么可能是可见的?我认为这里有一些混淆,它不可见,因为它没有显示出来…因为父母被隐藏意味着它也被隐藏<代码>:可见
并不意味着显示“无”
,表示它是可见的(有维度吗?),而不是。从网页用户的角度来看,子项将是不可见的,但是
返回的状态是(“:可见”)
?它是否返回隐式或显式可见性?元素中具有
display:none
的所有子元素都将隐藏。但我认为Peter想知道它自己的显示属性是什么。但我想不出你为什么想知道。。。Steve Greatrex的答案应该得到你想要的。Visible检查元素的可见性,而不仅仅是
显示
样式。查看我关于如何使用
.filter()
筛选选择的答案,然后您可以检查样式。@David-他正在检查
!=“无”
,任何其他显示类型都是有效的。对不起,我的意思是如果display=''?jQuery是否自动将“”替换为none?@David-
dos显示将是元素的默认值,对于
它是
,对于
  • 它是
    列表项
    ,等等。对于
    可见性:hidden
    @Gaby,它将失败-这取决于“可见”的定义,
    可见性:隐藏的
    仍然占据页面空间,因此您可以看到它。它不是
    :isvisible
    ,而是
    :visible
    ,感谢您在3年前的帖子上告诉我们这一点。这真的让彼得斯大吃一惊,现在他终于可以继续寻找隐藏元素中的元素了。
    // jQuery selector to find if an element is hidden by its parent
    jQuery.expr[':'].hiddenByParent = function(a) {
     return $(a).is(':hidden') && $(a).css('display') != 'none' && $(a).css('visibility') == 'visible';
    };
    
    // reallyvisible - by remy sharp & paul irish
    // :visible doesn't take in to account the parent's visiblity - 'reallyvisible' does...daft name, but does the job.
    // not neccessary in 1.3.2+
    $.expr[ ":" ].reallyvisible = function(a){ return !(jQuery(a).is(':hidden') || jQuery(a).parents(':hidden').length); };