2016-07-19 5 views
2

セレクタにaltクラス(奇数または偶数)を追加してから、別のセレクタに到達した後に再び新しいクラスを開始する必要があります。jQuery:oddまたは:特定のセレクタまでクラスを追加するには?

私は

<div class="person"></div> 
<div class="person"></div> 
<div class="person"></div> 
<div class="person"></div> 
<div class="person"></div> 
<div class="section-separator"></div> 
<div class="person"></div> 
<div class="person"></div> 

私は必要なもの

<div class="person"></div> 
<div class="person alt"></div> 
<div class="person"></div> 
<div class="person alt"></div> 
<div class="person"></div> 
<div class="section-separator"></div> 
<div class="person"></div> 
<div class="person alt"></div> 

持っている私は何に実行する問題は、それが奇数/偶数前のセクションからではなく、最初からやり直す数えておきたいです再び、私のスタイルは正しく適用されません。現在のjQueryは$('.personbox:odd').addClass('alt');

答えて

3

私はこれを行う巧妙な方法はないと思います。このため

var index = 0; 
 
$(".person, .section-separator").each(function() { 
 
    var $this = $(this); 
 
    if ($this.hasClass("section-separator")) { 
 
    index = 0; 
 
    } else { 
 
    if (index % 2 == 1) { 
 
     $this.addClass("alt"); 
 
    } 
 
    ++index; 
 
    } 
 
});
.alt { 
 
    color: blue; 
 
}
<div class="person">testing</div> 
 
<div class="person">testing</div> 
 
<div class="person">testing</div> 
 
<div class="person">testing</div> 
 
<div class="person">testing</div> 
 
<div class="section-separator">separator</div> 
 
<div class="person">testing</div> 
 
<div class="person">testing</div> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

感謝を:非賢い方法は、インデックスを追跡する、ちょうどを通じて.person.section-separator要素とループを選択しています。私は "巧妙な"方法を望んでいたが、私はこれのようなものが必要だと感じていた。 素晴らしいです。 – Sean

+0

私は実際にはCMSのインデックスをリセットする必要があるときを定義するセクションセパレータではないかもしれないことに気がついたので、あなたの答えを少し変更しなければなりませんでした。したがって、以下は私たちのために働きます... if(!$ this.next()。hasClass( "personbox")) – Sean

関連する問題