向带有插入标题元素的偶数元素添加边距 0

Adding margin 0 to even elements with inserted heading elements

我希望在 .item div 的偶数元素上设置 margin-right:0。但是,在某些地方插入了 header,这意味着 header 之后的第一个 .item 元素需要重置交替。这都是动态的,所以我不能在这些部分添加包装 div。

我需要的例子

<h2>heading</h2>
<div class="item"></div>
<div class="item"></div> <!-- margin-right:0 -->
<div class="item"></div>
<div class="item"></div> <!-- margin-right:0 -->
<h2>Heading</h2>
<div class="item"></div>
<div class="item"></div><!-- margin-right:0 -->
<div class="item"></div>
<h2>Heading</h2>
<div class="item"></div>
<div class="item"></div><!-- margin-right:0 -->
<div class="item"></div>
<div class="item"></div><!-- margin-right:0 -->

我试过但没有考虑标题的方法:

CSS

.item:nth-child(2n) {
     margin-right:0;
}

JS:

$('.item:even').css('margin-right', '0');

只需在 nth-child 函数中使用 evenodd 关键字即可:

div.item:nth-child(even) {
     margin-right:0;
}

您可以查看这里了解更多详情:https://www.w3.org/Style/Examples/007/evenodd.en.html

.item:nth-child(odd) {
   margin-right:0 !important;
 }

检查此 fiddle:https://jsfiddle.net/5rbyj2ed/6/

因为它被标记为 [jquery],您可以使用 .nextUntil 找到每个 h2 之间的所有 .items,然后将它们过滤到 odd/even.

在这种情况下,您需要使用 :odd 因为它们是从零开始的(所以第 1 行是偶数的第 0 行,第 2 行是第 1 行的奇数,等等)

$("h2").each(function() {
    // have to use :odd for "even" rows as zero-based
    $(this).nextUntil("h2").filter(":odd").addClass("even");
});
.wrapper { border: 1px solid #CCC; }
.item { height: 10px; margin-right:20px; border: 1px solid green; }
.item.even { margin-right: 0; background-color: lightgreen; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='wrapper'>
<h2>heading</h2>
<div class="item"></div>
<div class="item"></div> <!-- margin-right:0 -->
<div class="item"></div>
<div class="item"></div> <!-- margin-right:0 -->
<div class="item"></div>
<h2>Heading</h2>
<div class="item"></div>
<div class="item"></div><!-- margin-right:0 -->
<div class="item"></div>
<h2>Heading</h2>
<div class="item"></div>
<div class="item"></div><!-- margin-right:0 -->
<div class="item"></div>
<div class="item"></div><!-- margin-right:0 -->
</div>