2011-10-20 74 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內第一華里。因此,如果我想將應用於此選擇器的對象,則生成的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'); 

編輯:通過與所有元素

$("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類的,這是行不通的,你需要這個(如果適用)類this,如果它以前的兄弟姐妹沒有相同的類,然後添加that