【发布时间】:2011-03-24 11:16:29
【问题描述】:
在 jQuery 中,我想为所有第 5 个或更大的可见元素添加一个类,并为每个不是第 4 个子元素的元素添加另一个类。以前,我是这样做的:
$overlay.find('> .container .content .selector').not(':nth-child(4n)').addClass('hasRightMargin');
$overlay.find('> .container .content .selector:nth-child(n+5)').addClass('hasTopMargin');
但是,现在我正在切换第一个 .selector 的可见性,而 :nth-child 没有考虑可见性,所以这不能按我的意愿工作,因为它仍在计算不可见元素:
$overlay.find('> .container .content .selector:visible').not(':nth-child(4n)').addClass('hasRightMargin');
$overlay.find('> .container .content .selector:visible:nth-child(n+5)').addClass('hasTopMargin');
有没有办法在一个选择器中做我想做的事?还是我必须使用each 遍历所有.selector 元素并在那里手动过滤它们?
【问题讨论】:
-
所以您要选择屏幕上除每 4 个可见元素之外的所有内容?
-
我还认为您应该将“第 5 个或更大元素”的选择器更改为 :gt(4)。我觉得它不那么令人困惑,应该让它与你的 :visible 选择器一起工作。
-
@Evil 是的。第二行应该选择除前四个之外的所有可见元素。
-
如果 css 规范添加了一些限制项目的方法会很酷。例如
:not(#el[display:none]):nth-match(2n),以便您获得第一个匹配项的第 n 个项目。请注意,:not()尚未在主要浏览器中实现。 -
我的意思是
:not(#el[display=none]):nth-match(2n)
标签: jquery jquery-selectors visibility css-selectors