2016-07-19 9 views
2

Ich muss eine alte Klasse (auf ungerade oder gerade) zu einem Selektor hinzufügen, und dann neu starten, nachdem es einen anderen Selektor erreicht.jQuery: ungerade oder: sogar bis zu einem bestimmten Selektor addClass?

Was ich habe

<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> 

Was ich brauche

<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> 

Das Problem, das ich in laufen ist es will gerade/ungerade aus dem vorherigen Abschnitt halten Zählen und nicht von vorne beginnen wieder, so dass meine Styles nicht korrekt angewendet werden. Meine aktuelle jQuery ist $('.personbox:odd').addClass('alt');

Antwort

3

Ich glaube nicht, dass es eine clevere Möglichkeit ist, dies zu tun. Die un-geschickte Art und Weise wird nur die Auswahl .person und .section-separator Elemente und eine Schleife durch, Spur eines Index zu halten:

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

Dank. Ich hatte auf einen "cleveren" Weg gehofft, hatte aber das Gefühl, dass ich so etwas brauchen würde. Funktioniert gut. – Sean

+0

Ich musste tatsächlich eine kleine Änderung an Ihrer Antwort vornehmen, weil ich festgestellt habe, dass es nicht immer das Abschnitts-Trennzeichen ist, das definiert, wann es den Index in unserem CMS zurücksetzen muss. So funktioniert das folgende für uns ... if (! $ This.next(). HasClass ("personbox")) – Sean