jQuery:我需要类似':visible'的东西,即使父级是display = none也可以

时间:2010-04-06 18:05:26

标签: jquery

我有一个列表,其中隐藏元素有多种原因,每个原因对应一个css类,即:

<style>
    .filteredOut { display: none; }
    .somethingElse { display : none; }
    ...
</style>

我希望通过.filter(':even').addClass('even')应用交替的css类,但仅适用于可见的类。问题是当发生这种情况时隐藏了父级,因此.filter(':visible')返回0个元素。我需要像.filter(':visibileEventIfParentIsNot')

这样的东西

此外,每当我调用一个改变列表中可见内容的函数时,我宁愿不必调用函数。这可能是一个白日梦,但有没有办法做到这一点live()或类似的东西?我愿意接受这个想法。

2 个答案:

答案 0 :(得分:1)

对于.filter(':visibileEventIfParentIsNot'),您可以编写自己的过滤器功能,如下所示:

.filter(function() {
   return $(this).css("display") != 'none';
})

请注意,这不包括可见性,只包括传统的jQuery案例,例如.hide(),它实际上与.css('display', 'none')相同。

但是,如果你正在进行交替的行样式并突然显示奇数数量的元素,这看起来不正确,我认为你最好做{{1}应用程序在某些内容的可见性发生变化时(可能是.resize()事件.resize() plugin?)。

答案 1 :(得分:0)

使用类来控制您的活动。如果要过滤隐藏的元素,请向子项添加必要的类。当它们变得可见时,浏览器将重排css。