Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2021, 12:01
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

Запоминать посещенную категорию на сайте
Здравствуйте.
На сайте есть некий каталог с категориями товаров и есть меню с этими самыми категориями.
Когда пользователь заходит в какой-нибудь товар, родительская категория появляется в развернутом виде, т.е. добавляется css класс catalog-nav__item_active.
Это хорошо, но на сайте есть также другие страницы (Новости, Контакты и т.п.). Стоит задача: если пользователь переходит на эти страницы со страницы каталога, то категория каталога в меню должна оставаться открытой (т.е. с классом catalog-nav__item_active).
Насколько я понимаю, подобное можно сделать через куки - id последней активной категории записывается в переменную и затем ему присваевается класс на любых страницах. Но дальше теории дело не пошло. Прошу помощи.
<ul class="catalog-nav__list">
	<li id="cat1" class="catalog-nav__item catalog-nav__item_active">
		<span class="catalog-nav__link js-nav-catalog-button wall">Категория 1</span>
		<ul class="catalog-nav__subnav">
			<li class="catalog-nav__subnav-item first level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 1-1</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 1-2</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 1-3</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 1-4</a>
			</li>
		</ul>
	</li>
	<li id="cat2" class="catalog-nav__item">
		<span class="catalog-nav__link js-nav-catalog-button wall">Категория 2</span>
		<ul class="catalog-nav__subnav">
			<li class="catalog-nav__subnav-item first level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 2-1</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 2-2</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 2-3</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 2-4</a>
			</li>
		</ul>
	</li>
	<li id="cat3" class="catalog-nav__item">
		<span class="catalog-nav__link js-nav-catalog-button wall">Категория 3</span>
		<ul class="catalog-nav__subnav">
			<li class="catalog-nav__subnav-item first level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 3-1</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 3-2</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 3-3</a>
			</li>
			<li class="catalog-nav__subnav-item level1">
				<a class="catalog-nav__subnav-link" href="#">Страница 3-4</a>
			</li>
		</ul>
	</li>	
</ul>
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2021, 12:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Igorsrt
подобное можно сделать через куки
Есть и более современные средства в браузерах...
https://learn.javascript.ru/localstorage
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2021, 15:03
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

Сообщение от ksa Посмотреть сообщение
Есть и более современные средства в браузерах...
https://learn.javascript.ru/localstorage
Да, вроде что-то получилось, спасибо. Хотя не уверен, что этот код достаточно хорош.
$(document).ready(function(){
if (document.querySelector('.catalog-nav__item_active') != null) {	
  let firstBlock = document.querySelector( ".catalog-nav__item_active" );
  var myid = firstBlock.id;
  sessionStorage.setItem('myid', myid);
} 
else if(window.location.pathname=='/'){ sessionStorage.removeItem('myid'); }
else {
  var myid = sessionStorage.getItem('myid');
  if (document.getElementById(myid)) {
  	var element = document.getElementById(myid);
  	element.classList.add("catalog-nav__item_active", "current");
  }
}
});
Ответить с цитированием
  #4 (permalink)  
Старый 19.05.2021, 16:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Igorsrt
Хотя не уверен, что этот код достаточно хорош
Главное принцип понять сего действа...
А сами строки могут иметь довольно сложную структуру данных. Например можно сложный объект или массив перевести в json и сохранить.
Потом прочитать, преобразовать в данные и уже с ними работать дальше...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему CSS работают на сайте CODEPEN.IO, а на моем сайте не работают? mikhail apalaev Элементы интерфейса 3 26.01.2020 03:35
Поиск на сайте методом post konsd26 jQuery 13 18.11.2017 15:24
Как отследить, какую информацию о сайте запрашивает посетитель сайта? alexriver Общие вопросы Javascript 1 25.07.2017 06:08
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Сервисы для реализации оплаты кредитками на сайте. nyols Серверные языки и технологии 1 29.05.2011 13:44