jquery是否在我的each()中忽略了隐藏的div?

时间:2012-02-28 03:07:55

标签: jquery

我对这段代码感到沮丧。我有一个页面有几个div,其中包含无序列表,并使用jquery显示/隐藏,我已将其转换为选项卡式内容。我还有一个删除列表项的过滤器。当过滤器从选项卡中删除所有项目时,会显示一条消息,警告用户过滤器已从此选项卡中删除所有内容。删除过滤器后,仅删除活动(可见)选项卡的警告消息。过滤器有效地显示/删除非活动(隐藏)选项卡中的列表项,但我无法使警告消息消失。请看一下,谢谢你的时间:

$('div.eventContent').each( function (index, element) { 
        {
            var these_li = $ (element).find('li.eventContentItem:visible');
            if ( these_li.length > 0 ) 
            {
                $ (element).find('.noVisibleEvents').hide();
            } 
            else 
            {
                $(element).find('.noVisibleEvents').show();
            }
            these_li = 0;
        }
    })

1 个答案:

答案 0 :(得分:0)

我猜你的问题可能与继承或:visible jquery选择器有关。正如文档所说,jquery会考虑隐藏隐藏父级所包含的所有元素。因此,您应该检查css 显示属性,以便在隐藏标签中的元素可见或不可见时进行稳定。 然而,代码有点复杂

$('div.eventContent').each( function () { 
    {
        var isEmpty = true;

        $(this).find('li.eventContentItem').each(function() {
           if ($(this).css('display') != 'none') {
              isEmpty = false;  
              return false; // exits the loop
           }
        });

        if (isEmpty)             

          $ (this).find('.noVisibleEvents').hide();

        else 

            $(this).find('.noVisibleEvents').show();


})