26.02.2018, 02:00
|
Аспирант
|
|
Регистрация: 10.02.2014
Сообщений: 32
|
|
Помогите с 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 не запомнился(
помогите пожалуйста(
Последний раз редактировалось wisma, 26.02.2018 в 02:45.
|
|
26.02.2018, 03:11
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
<!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>
как вариант индексы запомнить
Последний раз редактировалось j0hnik, 26.02.2018 в 04:03.
|
|
26.02.2018, 03:47
|
Аспирант
|
|
Регистрация: 10.02.2014
Сообщений: 32
|
|
Сообщение от j0hnik
|
<!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');
}
});
</script>
</body>
</html>
как вариант индексы запомнить
|
Оно то работает, но у меня не хочет
исходной код вообще сайта можно глянуть на xpro.com.ua, тестирую до полной работы на локалке(
Я даже менял названия класса fn_switch на другой, но толку не дало(
Там-же можно и увидеть что при добавлении класса active следующему диву ставится
style="display:block;"
А вот если обновить страничку, то выходит что класс Актив он добавляет, но следующий блок без display:block; (
Последний раз редактировалось wisma, 26.02.2018 в 03:52.
|
|
26.02.2018, 04:08
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
добавил next().show()
пост обновил
|
|
26.02.2018, 04:11
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Я то думал у вас совсем не работает ничего, а тут мелочь такая, соседний блок показать
|
|
26.02.2018, 04:37
|
Аспирант
|
|
Регистрация: 10.02.2014
Сообщений: 32
|
|
Сообщение от j0hnik
|
Я то думал у вас совсем не работает ничего, а тут мелочь такая, соседний блок показать
|
Все отлично и супер, но есть небольшое НО, возможно ли это все привязать допустим к
<div class="h2 filter_name fn_switch" data-switch="тут уникальный айди">
data-switch? т.к. генерировать уникальное числовое значение мы (точнее движок) там может.... А если через индексы то выходит в других категориях товарах, с другими фильтрамы автоматом active привязывает к другим елементам, и выходит не удобно
Последний раз редактировалось wisma, 26.02.2018 в 04:40.
|
|
26.02.2018, 04:39
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
wisma,
если это нужно на одной странице, лучше проверять ее адрес, и если тот загружать из localStorage
|
|
26.02.2018, 04:44
|
Аспирант
|
|
Регистрация: 10.02.2014
Сообщений: 32
|
|
Сообщение от j0hnik
|
wisma,
если это нужно на одной странице, лучше проверять ее адрес, и если тот загружать из localStorage
|
Это используется на 120 страницах допустим, и на каждой странице свои значения, но суть я понял, а теперь последний вопрос, как же это реализировать?
Или при использовании проверки через data и множеству значений мы получим очень большой файл хранилища?
|
|
26.02.2018, 04:51
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
<!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>
должно сработать
|
|
26.02.2018, 04:55
|
Аспирант
|
|
Регистрация: 10.02.2014
Сообщений: 32
|
|
Сообщение от j0hnik
|
должно сработать
|
Спасибо огромное!) Все отлично работает)
|
|
|
|