选择多个集合的第一个元素

Tyl*_*den 19 javascript jquery jquery-selectors

我有一个尴尬的问题,因为继承了一堆真正非常糟糕的HTML格式.

基本上我有一些像这样的表行:

<tr class="odd">...</tr>
<tr class="odd">...</tr>
<tr class="odd">...</tr>
<tr class="even">...</tr>
<tr class="even">...</tr>
<tr class="even">...</tr>
<tr class="odd">...</tr>
<tr class="odd">...</tr>
<tr class="odd">...</tr>
Run Code Online (Sandbox Code Playgroud)

我需要的是一个jQuery选择器,它将为我提供每个类块的第一个元素.那清楚了吗?我不知道怎么解释它.

所以在示例中我想要行1,4和7.

到目前为止,我已经选择了每个第n个孩子,但我现在意识到这不会起作用,因为在每个类块中总不会有相同数量的行.

任何帮助,你们可以给予它赞赏,一如既往:)

干杯!

Bol*_*ock 28

您需要对:not()兄弟选择器使用一些战略用途:

$('tr.odd:first-child, tr.even:first-child, tr:not(.odd) + tr.odd, tr:not(.even) + tr.even')
Run Code Online (Sandbox Code Playgroud)

这些tr:not(...) + tr...位选择任何tr直接位于tr不具有相同类名的元素.您不能动态地执行此操作(例如,使用某种通配符),但如果您单独指定每个类名,则完全可以.这将确保您只选择每个连续组中的第一个元素.

的原因:first-child是必需的伪很简单,因为+不匹配的第一个孩子,因为这意味着一个元素之间的关系它的前置兄弟.请注意,这只是第一个:first-child帐户.你可以简单地替换,如果每个元素都只有一个类名,但为了清楚起见,我仍然指定它们. trtr.odd:first-child, tr.even:first-childtr:first-childtr

最后但同样重要的是,这可以兼作有效的CSS选择器,因此如果您愿意,也可以在样式表中使用它.

  • 好的,BoltClock! (2认同)
  • 遗憾的是我刚刚找到了这个解决方案,但是你在1分钟之前发布了这个解决方案. (2认同)

Den*_*ret 10

$('tr.odd:not(.odd+.odd),tr.even:not(.even+.even)')
Run Code Online (Sandbox Code Playgroud)

这只是接受任何.odd不跟随另一个元素的元素.odd,以及.even不跟随另一个.even元素的任何元素.

  • 这个答案也是正确的.它不应该被低估. (3认同)
  • @King King:这是jQuery发明的非标准语法.问题*是*关于使用jQuery来选择元素,所以答案没有错*本身*.但是纯粹主义者可能会因为各种原因而更喜欢有效的CSS选择器,如果它实际上可以使用CSS选择器.另见http://stackoverflow.com/questions/10711730/whats-the-difference-in-the-not-selector-between-jquery-and-css (2认同)