|
Помогите с localStorage
Есть скрипт:
$('.fn_switch').click(function(e){ e.preventDefault(); $(this).next().slideToggle(300); if ($(this).hasClass('active')) { $(this).removeClass('active'); } else { $(this).addClass('active'); } }); Погуглив попробывал этот код: $('.fn_switch').click(function(e){ e.preventDefault(); $(this).next().slideToggle(300); if ($(this).hasClass('active')) { $(this).removeClass('active'); window.localStorage.hasActiveClass = 'active'; } else { $(this).addClass('active'); window.localStorage.hasActiveClass = ''; } var hasClass = window.localStorage.hasActiveClass || ''; if (JSON.parse(hasClass)) { $('.fn_switch').addClass("active"); } }); Разметка в html <div class="h2 filter_name fn_switch" data-vkladka="1">Вес <i class="angle_icon"></i></div> <div class="filter_group"> <div class="filter_item"> **** </div> <div class="h2 filter_name fn_switch active" data-vkladka="2">Страна производитель <i class="angle_icon"></i> </div> <div class="filter_group" style="display: none;"> <div class="filter_item"> ******* </div> </div> И при обноввлении страницы вкладки которым присвоен был класс active не запомнился( помогите пожалуйста( |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <style> .active{ background-color: red; } </style> </head> <body> <div class="fn_switch">1</div><div></div> <div class="fn_switch">2</div><div></div> <div class="fn_switch">3</div><div></div> <div class="fn_switch">4</div><div></div> <div class="fn_switch">5</div><div></div> <div class="fn_switch">6</div><div></div> <div class="fn_switch">7</div><div></div> <script> $(function(){ $('.fn_switch').click(function(e){ e.preventDefault(); $(this).next().slideToggle(300); if ($(this).hasClass('active')) { $(this).removeClass('active'); } else { $(this).addClass('active'); } var arr = $.map($('.fn_switch'), function(el, i){ if($(el).hasClass('active')) return i; }); localStorage.setItem('ind', JSON.stringify(arr)); }); var arr = JSON.parse(localStorage.getItem('ind')); if(arr){ $('.fn_switch').filter(function(i){ return arr.includes(i); }).addClass('active').next().show(); } }); </script> </body> </html> как вариант индексы запомнить |
Цитата:
исходной код вообще сайта можно глянуть на xpro.com.ua, тестирую до полной работы на локалке( Я даже менял названия класса fn_switch на другой, но толку не дало( Там-же можно и увидеть что при добавлении класса active следующему диву ставится style="display:block;" А вот если обновить страничку, то выходит что класс Актив он добавляет, но следующий блок без display:block; ( |
добавил next().show()
пост обновил |
Я то думал у вас совсем не работает ничего, а тут мелочь такая, соседний блок показать
|
Цитата:
:dance: Все отлично и супер, но есть небольшое НО, возможно ли это все привязать допустим к <div class="h2 filter_name fn_switch" data-switch="тут уникальный айди"> data-switch? т.к. генерировать уникальное числовое значение мы (точнее движок) там может.... А если через индексы то выходит в других категориях товарах, с другими фильтрамы автоматом active привязывает к другим елементам, и выходит не удобно |
wisma,
если это нужно на одной странице, лучше проверять ее адрес, и если тот загружать из localStorage |
Цитата:
Или при использовании проверки через data и множеству значений мы получим очень большой файл хранилища? |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <style> .active{ background-color: red; } </style> </head> <body> <div class="fn_switch">1</div><div></div> <div class="fn_switch">2</div><div></div> <div class="fn_switch">3</div><div></div> <div class="fn_switch">4</div><div></div> <div class="fn_switch">5</div><div></div> <div class="fn_switch">6</div><div></div> <div class="fn_switch">7</div><div></div> <script> $(function(){ var adr = document.location.pathname; // станица $('.fn_switch').click(function(e){ e.preventDefault(); $(this).next().slideToggle(300); if ($(this).hasClass('active')) { $(this).removeClass('active'); } else { $(this).addClass('active'); } var arr = $.map($('.fn_switch'), function(el, i){ if($(el).hasClass('active')) return i; }); localStorage.setItem(adr, JSON.stringify(arr)); }); var arr = JSON.parse(localStorage.getItem(adr)); if(arr){ $('.fn_switch').filter(function(i){ return arr.includes(i); }).addClass('active').next().show(); } }); </script> </body> </html> должно сработать |
Цитата:
|
Часовой пояс GMT +3, время: 15:34. |
|