Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery选择器:除n以外的所有第一行_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

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的‘折叠’点处为每个条纹插入一个元素。因此,在n
b
之后,插入元素,添加
。然后为每个元素选择
。在本例中,
+
的问题是,它会在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;
}