仅获取未隐藏的元素.. Jquery

Posted

技术标签:

【中文标题】仅获取未隐藏的元素.. Jquery【英文标题】:Get only the elements which are not hidden.. Jquery 【发布时间】:2012-12-06 15:33:30 【问题描述】:

我只需要在 jquery foreach 循环中获取 show() 元素

在下面的代码中,我得到了所有带有类测试的元素(即)隐藏和显示......但只需要显示而不是隐藏一个......如何过滤并在这一行本身中获取它? ??

$('.element').find('.test').each(function(index, loopelement) 

 

【问题讨论】:

真正值得花一个小时(或两个小时,max)从头到尾阅读jQuery API documentation。您会发现各种您不知道的事情(包括 Rory 指出的 :visible 选择器)。 【参考方案1】:

使用:visible 选择器:

$('.element').find('.test:visible').each(function(index, loopelement) 
    // do stuff...
);

【讨论】:

@RoryMcCrossan,但问题是“......隐藏和显示......”。我的意思是,我不是在争论文档。我已阅读它们,这就是我发表此评论的原因,因为此解决方案“不是问题的确切答案” @Pisek 我不确定你的意思。 OP 说他目前正在获取所有元素(隐藏和显示),他想改变这种行为,以便选择器只返回显示的元素 - 这正是我的回答所做的。 @RoryMcCrossan,本期题目为Get only the elements which are not hidden.. Jquery。在 :visible 的 jQuery 文档中:Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout.。因此,正如我之前所说:您的答案不正确...您将选择可见隐藏 的元素。您只会省略 display: none 元素。 @RoryMcCrossan,对不起,但没有;)你的答案是错误的。同样,问题是...但只需要显示而不是隐藏...。您的代码不适用于隐藏元素!这与语义无关 - hidden 是隐藏的,not-displayed 是不显示的。对此要严格。您的代码仅适用于未显示的元素。伙计,我刚刚向你展示了你所犯的错误。如果您想修复它,请按照您喜欢的方式进行操作。我只是来这里寻找一个问题的答案,对不起,答案是错误的。【参考方案2】:

您可以使用jQuery's :visible 选择器。

var $visibles = $(".element").find(".test:visible");

但请注意 jQuery 的工作原理。来自 jQuery 文档:

如果元素占用了文档中的空间,则认为它们是可见的。 可见元素的宽度或高度大于零。

具有可见性的元素:隐藏或不透明度:0 被认为是可见的, 因为它们仍然会占用布局中的空间。

如果这种行为不适合您的用例,您可以扩展 jQuery,创建您自己的自定义选择器:

$.expr[":"].reallyVisible =
    function reallyVisible (elem) 
        if (elem == null || elem.tagName == null) 
            return false;
        

        if (elem.tagName.toLowerCase() === "script" || elem.tagName.toLowerCase() === "input" && elem.type === "hidden") 
            return false;
        

        do 
            if (!isVisible(elem)) 
                return false;
            

            elem = elem.parentNode;
         while (elem != null && elem.tagName.toLowerCase() !== "html");

        return true;
    ;

function isVisible (elem) 
    var style = elem.style;

    // Depending on your use case
    // you could check the height/width, or if it's in the viewport...
    return !(style.display === "none" || style.opacity === "0" || style.visibility === "hidden");

它可以用作任何其他内置选择器:

$(".element").find(".test:reallyVisible");
$(".element").find(".test:first").is(":reallyVisible");

【讨论】:

以上是关于仅获取未隐藏的元素.. Jquery的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript或者jQuery怎样获取一个隐藏元素的宽高

Jquery UI - 从显示中获取一个元素:拖动时隐藏元素

用jquery把页面中的一个元素附给一个变量,可以用该变量操纵这个元素的属性但却还报错说这个变量未定义

jQuery点击当前元素显示其他元素隐藏

jQuery 如何获取到隐藏元素的高度?或者在dom元素可见性改变时能触发个事件也行。

求教:jquery如何操作隐藏的DOM元素