2013-10-10 3 views
2

Я нахожусь в середине создания страницы новостей. Есть большие посты для самой последней записи каждого месяца, и на каждом нечетном/даже маленьком сообщении есть разные стили, использующие jQuery для выбора исключительно по классу (большие сообщения: «.blogPostBig», а меньшие - «.blogPost») :Повторите нечетные стили даже после определенного div

$(function() { 
    $('.blogPost:odd').css({ 
         'border-left': '0', 
         'padding-right': '0' 
    }); 
    $('.blogPost:even').css({ 
         'border-right': '1px solid #4E4E4E', 
         'padding-left': '0' 
    }); 
}); 

Вот он работает, как он должен:

blog example 1


Однако, если есть только один небольшой пост до следующего большого поста, который вы можете s й в приведенном ниже примере, моделирование с использованием нечетного и четным перепуталось:


blog example 2

Я смотрел в использовании .after(), .prev(), .next (), но они, похоже, не помогают мне достичь того, чего я хочу.

Что я хотел бы знать, так это то, что если есть способ сбросить/применить нечетные/четкие стили для небольших постов, ПОСЛЕ крупного сообщения после каждого большого поста.

Заранее спасибо.

**** **** РЕДАКТИРОВАТЬ

Схема такова:

-big
-малые
-малые
-loadMore

ПРЕВРАЩАЕТСЯ В

-big
-small
-малых
-big
-малых
-малых
-малых
-big
-loadMore

т.д.

ответ

1

Предполагая, что все элементы в .blogPost/.blogPostBig являются братьями и сестрами, как это :

- big 
- small 
- small 
- small 
- big 
- small 

Вы должны быть в состоянии использовать nextUntil как вы итерацию по каждому элементу:

$('.blogPostBig').each(function(){ 
    smallPosts = $(this).next() // start with the first small post after this big post 
    .nextUntil('.blogPostBig') // stop when we hit another big post 
    .andSelf();     // add back the first small post 
    smallPosts.filter(':odd').css({color: 'red'}) 
    smallPosts.filter(':even').css({color: 'blue'}) 
}); 

Это немного грязный, но я не уверен, что есть способ селектор только (но я могу ошибаться).

Here's a jsFiddle для вас.

+0

Это похоже на то, что я хочу!Одна вещь, я думаю, я не упоминал, что у меня есть «загрузить больше сообщений» («.loadMore») div, что, кажется, разрушает это. Я обновляю основной пост, чтобы показать, что я подразумеваю под макетом. – XstiX

+0

Хорошо, я почти исправил свою проблему. Функциональность loadMore возилась с ней, поэтому я просто запустил ее повторно на загрузочном клике вместе со своим собственным кодом и исправил его. Все, что осталось, это стиль «border-right», который все еще применяется к div loadload. – XstiX

+0

Исправлено: просто дано 'border: 0! Important' to loadMore div! Спасибо за вашу помощь. – XstiX

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