Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с localStorage (https://javascript.ru/forum/misc/72786-pomogite-s-localstorage.html)

wisma 26.02.2018 02:00

Помогите с 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 не запомнился(

помогите пожалуйста(

j0hnik 26.02.2018 03:11

<!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>


как вариант индексы запомнить

wisma 26.02.2018 03:47

Цитата:

Сообщение от j0hnik (Сообщение 479163)
<!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; (

j0hnik 26.02.2018 04:08

добавил next().show()

пост обновил

j0hnik 26.02.2018 04:11

Я то думал у вас совсем не работает ничего, а тут мелочь такая, соседний блок показать

wisma 26.02.2018 04:37

Цитата:

Сообщение от j0hnik (Сообщение 479166)
Я то думал у вас совсем не работает ничего, а тут мелочь такая, соседний блок показать


:dance: Все отлично и супер, но есть небольшое НО, возможно ли это все привязать допустим к

<div class="h2 filter_name fn_switch" data-switch="тут уникальный айди">



data-switch? т.к. генерировать уникальное числовое значение мы (точнее движок) там может.... А если через индексы то выходит в других категориях товарах, с другими фильтрамы автоматом active привязывает к другим елементам, и выходит не удобно

j0hnik 26.02.2018 04:39

wisma,
если это нужно на одной странице, лучше проверять ее адрес, и если тот загружать из localStorage

wisma 26.02.2018 04:44

Цитата:

Сообщение от j0hnik (Сообщение 479168)
wisma,
если это нужно на одной странице, лучше проверять ее адрес, и если тот загружать из localStorage

Это используется на 120 страницах допустим, и на каждой странице свои значения, но суть я понял, а теперь последний вопрос, как же это реализировать?

Или при использовании проверки через data и множеству значений мы получим очень большой файл хранилища?

j0hnik 26.02.2018 04:51

<!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>


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

wisma 26.02.2018 04:55

Цитата:

Сообщение от j0hnik (Сообщение 479170)

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

:victory: Спасибо огромное!) Все отлично работает)


Часовой пояс GMT +3, время: 04:14.