2012-03-28 2 views
0

Я пытаюсь динамически создавать «книгу» с сервера сервера. Эта часть работает в порядке, и генерируя результат, похожий на следующее:Выберите нечетные/четные дочерние divs

<div id="pagesContainer"> 
    <div class="pageContent"> 
     <div> 
      Page 1 content 
     </div> 
    </div> 
    <div class="pageContent"> 
     <div> 
      Page 2 content 
     </div> 
    </div> 
    <div class="pageContent"> 
     <div> 
      Page 3 content 
     </div> 
    </div> 
    <div class="pageContent"> 
     <div> 
      Page 4 content 
     </div> 
    </div> 
    <div class="pageContent"> 
     <div> 
      Page 5 content 
     </div> 
    </div> 
</div> 

Что мне нужно сделать, желательно с использованием JQuery является добавление классов к внутрипартийной большинства дивы, такие как page-left или page-right. Например, страницы 1, 3 и 5 получат page-left, а страницы 2 и 4 получат page-right. Может быть больше (или меньше), чем 5 страниц. Я попытался использовать кучу разных сценариев четных/нечетных селекторов, но, похоже, не может заставить его работать правильно.

Может кто-нибудь указать мне в правильном направлении?

Спасибо!

+0

jQuery передает целое число, когда вы выполняете итерацию с помощью '.each()'; Вы не можете просто использовать это? – Pointy

ответ

10

Используйте: нечетные и: даже селекторы.

Например:

$('.pageContent:odd').addClass("page-left") 
$('.pageContent:even').addClass("page-right") 
+0

Я отмечаю это как ответ, поскольку он меня ближе. Я закончил использование '$ (". PageContent: nth-child (odd)> div "). AddClass (" page-left ");' для соответствия моим точным потребностям! Благодаря! –

7

Это должно сработать.

$('#pagesContainer').children('.pageContent').each(function(index) 
{ 
    $(this).addClass(index % 2 ? 'page-right' : 'page-left'); 
}); 

Демоверсия jsFiddle.

1
$('.pageContent').each(function(i,t){ 
var addClass = i % 2 == 0 ? 'odd' : 'even'; 
$(t).addClass(addClass); 
}) 
3

Попробуйте :odd и :even селекторы:

$('.pageContent:odd').addClass('odd'); 

Вы также можете использовать :nth-child воспользоваться повышает производительность, потому что это встроенный селектор:

$('.pageContent:nth-child(odd)').addClass('odd'); 
1

Попробуйте использовать nth-child(even), как описано здесь: http://www.w3.org/Style/Examples/007/evenodd.en.html

.pageContent:nth-child(even) { /* Something amazing */ } 
+0

Примечание: на вопрос нет тега 'CSS' ... – ManseUK

+0

@ManseUK Вы совершенно правы. Я читал, что он хотел добавить классы к чередующимся строкам и вырезать угол, чтобы предложить, чтобы CSS применялся непосредственно к чередующимся строкам, не замечая, что 'CSS' не был помечен. Конечно, класс может быть намного больше, чем просто CSS! – Johno

0
$(".pageContent:odd").addClass("oddPage"); 
$(".pageContent:even").addClass("evenPage"); 
0

Является ли это то, что вы пытаетесь достичь? http://jsfiddle.net/Sf7AD/3/

$('#pagesContainer > div:even').addClass('page-left'); 
$('#pagesContainer > div:odd').addClass('page-right'); 

Не то, поскольку элементы равны 0 проиндексированы, :even будет контр-интуитивно выбирает первый, третий, пятый и т.д. элемент

Из документов http://api.jquery.com/even-selector/

В частности , обратите внимание, что индексирование на основе 0 означает, что встречно-интуитивно: даже выбирает первый элемент, третий элемент, и т. д. в пределах согласованного набора.

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