Как поставить класс css по умолчению?

279
04 июля 2017, 22:07

Есть две кнопки - Таблица и Список. Нажимаю на Таблица - объекты выводятся таблицей. Нажимаю на Список - выводятся списком.

Все это дело запоминается с помощью cookies.
Проблема в том, что когда cookies пусты, то объекты отображаются в виде таблицы (это правильно), но по умолчанию активная кнопка Список
Получается мне нужно сделать один лишний клик. т.е. нажать на Таблица, она станет активной, но ничего не изменится т.к. объекты отображаются уже таблицей. И только потом на Список

Нужно чтобы объекты отображались таблицей и кнопка Таблица тоже была активной (класс .active)

erb:

<ul class="nav">
  <li class="<%= 'active' if cookies['filter-product'] != 'buble' %>">
    <a class="nav-list" href="">item</a>
  </li>
  <li class="<%= 'active' if cookies['filter-product'] == 'buble' %>">
    <a class="nav-cols" href="">table</a>
  </li>
</ul>
<!-- container with items -->
<div class="infinite-table">
  <ul class="ctf--b-product-list <%= 'product-list-buble' unless cookies['filter-product'] == 'buble' %>">
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
  </ul>
</div>

js:

$(document).ready(function(event){
    $('.nav a').click(function() {
    if (!($(this).parent().hasClass('active')))
    {
        $('.nav li').removeClass('active');
        $(this).parent().addClass('active');
        if ($(this).hasClass('nav-cols'))
        {
          $.cookie('filter-product', 'buble');
          $('.ctf--b-product-list').addClass('product-list-buble');
        }
        else{
          $('.ctf--b-product-list').removeClass('product-list-buble');
          $.cookie('filter-product', 'non-buble');
        }
        return false;
    }
    else {
        return false;
    }
  });
});

css: (использую спрайты для кнопок Таблица и Список)

.nav { list-style:none; vertical-align:top; right:0; top:-50px; position:absolute; }
.nav li { float: left; padding:0 0 0 10px; }
.nav a { width:18px; height:18px; font-size:2em; line-height:0; display:block; }
.nav .active .nav-list { background-position:0 bottom; }
.nav .nav-cols { background-position:right 0; }
.nav .active .nav-cols { background-position:right bottom; }

или подскажите плагины для этих целей. Заранее спасибо.

Answer 1

Наверное так, если нет элемента с классом active, применяем этот класс на родителя класса nav-cols: Можно еще объявить переменную в erb со значением из кук, и проверять если она есть то делать active исходя из условий, а если ее нет вообще то ставить active по умолчанию

$(document).ready(function(event){
    if ( $('.active').length === 0 ) {
       $('.nav-cols').parent().addClass('active')
    }
    $('.nav a').click(function() {
    if (!($(this).parent().hasClass('active')))
    {
        $('.nav li').removeClass('active');
        $(this).parent().addClass('active');
        if ($(this).hasClass('nav-cols'))
        {
          $.cookie('filter-product', 'buble');
          $('.ctf--b-product-list').addClass('product-list-buble');
        }
        else{
          $('.ctf--b-product-list').removeClass('product-list-buble');
          $.cookie('filter-product', 'non-buble');
        }
        return false;
    }
    else {
        return false;
    }
  });
});
<!-- container with items -->
<div class="infinite-table">
  <ul class="ctf--b-product-list <%= 'product-list-buble' unless cookies['filter-product'] == 'buble' %>">
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
  </ul>
</div>
READ ALSO
CSS анимация в Microsoft Edge

CSS анимация в Microsoft Edge

Добрый день! Помогите, пожалуйста, решить проблемуЕсть сайт на котором при изменении размера экрана меняются марджины у пунктов меню и чтобы...

366
Есть ли аналог background-size: cover для Img?

Есть ли аналог background-size: cover для Img?

Можно ли сделать такое же выравнивание изображения img, как это делается с помощью background-size: cover? Видел решения с помощью object-fit, также смотрел...

380
Копия AUTO_INCREMENT в соседнюю ячейку при INSERT в MySQL

Копия AUTO_INCREMENT в соседнюю ячейку при INSERT в MySQL

Возникла необходимость, когда создается новая запись делать копию ячейки id которая имеет свойства AUTO_INCREMENT, в ту же таблицу, но в другую ячейку

263
Ест ли разница между int a; int b; и int a, b; с точки зрения memory management?

Ест ли разница между int a; int b; и int a, b; с точки зрения memory management?

Я знаю, что int a; Int b; и int a, b; - то же самоеНо я хочу знать, может int a, b; использует меньше памяти во время компиляции, чем int a; Int b;

232