Javascript jQuery选择器:除n以外的所有第一行
所以我有一张这样的兄弟姐妹名单Javascript jQuery选择器:除n以外的所有第一行,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,所以我有一张这样的兄弟姐妹名单 <div class="b"></div> <div class="a"></div> <div class="b"></div> <div class="b"></div> <div class="b"></div> <div class="b"></div> <div class="a">
<div class="b"></div>
<div class="a"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
<div class="a"></div>
<div class="b"></div>
<div class="b"></div>
<div class="a"></div>
<div class="c"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
<div class="b"></div>
换言之,除了在b
或开头之外的任何内容之后选择n个元素之外的所有b
我尝试了第n个孩子(n+3),但这似乎只是考虑了所有的b
,尽管a
破坏了它们
我还试过摆弄
.nextUntil()
和.filter()
,但一定要有比我更好的人才能破解这个问题。想法?由于这些元素都是共享同一父元素的兄弟元素,因此巧妙地使用兄弟组合符可以实现以下目的:
$('.b + .b + .b').addClass('selected');
对于任何n,只需在最后一个.b
之前重复.b+
n次即可
不需要:nth-child()
或任何遍历/过滤函数,而且它还是一个有效且受良好支持的CSS选择器,以防您希望将样式应用于这些元素
如果需要在每组
.b+.b+.b
元素之前添加中间元素,请首先添加类,然后在每组匹配元素之前添加中间元素。第一个元素可以通过在其后面查找未选择的元素来匹配,该元素排除了所有在其后面有选择的元素:
$('.b + .b + .b').addClass('selected')
.filter(':not(.selected) + .selected')
.before('<div class="inserted"></div>');
$('.b+.b+.b').addClass('selected'))
.filter(':未(.selected)+.selected')
.在('')之前;
如果链接太多的方法会让人困惑,您可以始终分别执行每个步骤:
$('.b + .b + .b').addClass('selected');
$(':not(.selected) + .selected').before('<div class="inserted"></div>');
$('.b+.b+.b').addClass('selected');
('')之前的$('':未(.selected)+.selected');
css:
a
没有破坏它们。它们只是作为一个单独的div出现在那里
你是说:n个孩子(n+3)
?它不能按预期工作的原因是因为:nth-child()
始终从一开始就计算同一父项下的所有兄弟姐妹。回答得好,编辑了问题。但是的,反复试验告诉我这不适用于这个案子。我只是想在有人说‘你尝试过什么?’之前提一下,否则我会选择这个解决方案,但我需要在n的‘折叠’点处为每个条纹插入一个元素。因此,在nb
之后,插入元素,添加。然后为每个元素选择。在本例中,+
的问题是,它会在n之后的每个b
之间添加元素。使用.first()
不会有帮助,因为它只适用于第一条条纹。@Emphram Stavanger:我已经更新了我的答案。它能完成你想要的吗?@BoltClock:太棒了!我学到了一些新东西。谢谢大家!+1Emphram和@Floyd Pink,很高兴我能帮忙!
$('.b + .b + .b').addClass('selected');
$(':not(.selected) + .selected').before('<div class="inserted"></div>');
.b+.b+.b {
color: red;
}