2014-01-06 2 views
2

Допустим, у меня есть следующие настройки:JQuery селекторы и sibblings

<div> 
<div class="pr-selec">some text</div> 
... 
</div> 


<div> 
<div class="pr-selec">some text</div> 
<div class="new-class">other text</div> 
... 
</div> 

с помощью JQuery, как я могу выбрать только те классы .pr-selec Div, которые не имеют sibbiling .new-class DIV?

Я пытался что-то вроде этого:

jQuery(".pr-selec").not().sibblings("new-class").each({ 
      //stuff 
     }); 

, но это не делает его.

ответ

3

Вы лучше с помощью filter:

jQuery(".pr-selec").filter(function(){ 
    return !$(this).siblings('.new-class').length; 
}).each(...) 
+0

блестящий. Спасибо! – thindery

4

Попробуйте .not() с :has-selector и next-sibling selector

$('.pr-selec').not(':has(~ .new-class)').css('color', 'red') 

Демо: Fiddle

Примечание: Это не будет работать, если new-class элемент не является следующий брат (предыдущий): Fiddle

+0

+1 хорошо объяснено – lhan

+0

действительно нравится это решение. Спасибо. в моем случае, «новый класс» всегда следующий сиблинг – thindery

+0

Это довольно умно! +1, но, как вы сказали, он работает только на следующем элементе и медленнее, чем 'filter': http://jsperf.com/test-siblings –

Смежные вопросы