我有一个列表,其中的元素由于多种原因被隐藏,每个元素对应一个css类,即:
<style>
.filteredOut { display: none; }
.somethingElse { display : none; }
...
</style>我想通过.filter(':even').addClass('even')应用交替的css类,但只应用于可见的类。问题是当发生这种情况时,父元素是隐藏的,所以.filter(':visible')返回0个元素。我需要像.filter(':visibileEventIfParentIsNot')这样的东西
此外,我不希望每次调用更改列表中可见内容的函数时都调用包含此参数的函数。这可能是白日梦,但有没有办法做到这一点,即live()或类似的东西?我对非主流的想法持开放态度。
发布于 2010-04-07 02:51:06
对于.filter(':visibileEventIfParentIsNot'),您可以编写自己的过滤器函数,如下所示:
.filter(function() {
return $(this).css("display") != 'none';
})注意,这并不包括可见性,只是像.hide()这样的传统jQuery案例,它实际上与.css('display', 'none')是相同的。
但是如果您正在执行交替的行样式,并且突然显示了奇数个元素,这看起来是不正确的,我认为当某些内容的可见性发生变化时(可能是带有.resize() plugin的.resize()事件?),您最好还是使用.filter(':even')应用程序。
发布于 2010-04-07 02:27:10
使用类来控制您的事件。如果要过滤隐藏元素,请向子级添加必要的类。当它们变得可见时,浏览器将重排css。
https://stackoverflow.com/questions/2587168
复制相似问题