2011-10-20 7 views
3

私はこのようなDOMを持っています。サブセットの先頭を選択する

<li></li> 
<li class="this"></li> 
<li class="this"></li> 
<li></li> 
<li></li> 
<li class="this"></li> 
<li class="this"></li> 
<li class="this"></li> 
<li></li> 
<li class="this"></li> 
<li></li> 
<li></li> 

私は唯一の連続this ESの各シリーズ内の最初のLiを選択したいと思います。

したがって、たとえば、をこのセレクタのオブジェクトに適用すると、結果のDOMは次のようになります。

<li></li> 
<li class="this that"></li> 
<li class="this"></li> 
<li></li> 
<li></li> 
<li class="this that"></li> 
<li class="this"></li> 
<li class="this"></li> 
<li></li> 
<li class="this that"></li> 
<li></li> 
<li></li> 

このような効果を達成する最も効率的な方法は何でしょうか? DOMの要素を追加したり削除したりすることはできません(例えば、独自のラッパーdivで連続した系列をラップすることはできません)。

ありがとうございます!

答えて

6

これは機能しますか?

$("li:not(.this) + .this").addClass('that'); 

EDIT:最初の項目は機能しませんクラスthis、であるならば(それが適用される場合)、あなたがこれを必要がありますと、すべての要素を通じ

$("li:not(.this) + .this, .this:first-of-type").addClass('that'); 
+0

私はそれがどのように動作するのか分かりませんが、実際には動作するようです!どうもありがとう! –

+1

@EmphramStavanger: '+'は隣の要素を意味し、右手にあるものを選択します:)そしてあなたは大歓迎です! CSS3は素晴らしいです。 – Ryan

+0

@EmphramStavanger:ああ、私はちょっとした問題に気付きました。私の編集を参照してください。 – Ryan

1
$('.this').each(function(){ 
    if($(this).prev().hasClass('this')==false){ 
     $(this).addClass('that'); 
    } 
}); 

ループクラスthisとその前の兄弟が同じクラスを持っていない場合はthatを追加してください

関連する問題