删除类并将其添加到localStorage



当我点击一个链接时,它有类nav_sidebar_link_active,但如果我刷新(f5)这个页面,这个类正在消失,这是一个问题,需要将它添加到localStorage中/从中删除,所以当js代码被注释时,我确实尝试比较linkId !== link,如果为true,需要从localStorage中删除这个类,并在下面添加到localStorage

const box = document.querySelectorAll('.nav_sidebar_link');
/*for (let i = 0; i < box.length; i++) {
box[i].onclick = function(e) {
const target = e.target;
const linkId = '#' + target.id + '-anchor';
const link = target.getAttribute('href')
for (let j = 0; j < box.length; j++) {
if (linkId !== link) {
// maybe here remove from localStorage
box[j].classList.remove('nav_sidebar_link_active');
}
}
// maybe here add to localStorage
this.classList.add('boxActive');
}
}*/
for (let i = 0; i < box.length; i++) {
box[i].onclick = function() {
for (let j = 0; j < box.length; j++) {
box[j].classList.remove('nav_sidebar_link_active');
}
this.classList.add('nav_sidebar_link_active');
}
}
body {
background-color: #000;
}
.nav_sidebar_wrap {
position: relative;
min-width: 29.2rem;
}
.nav_sidebar_wrap.contacts-mod {
opacity: 0;
}
.nav_sidebar {
position: fixed;
top: 34%;
left: 10rem;
max-width: 28rem;
z-index: 999;
}
.nav_sidebar_item {
padding: 0 0 2rem 0;
}
.nav_sidebar_link {
position: relative;
display: block;
padding: 0 0 0 2.5rem;
font-size: 1.4rem;
line-height: 1.6;
letter-spacing: 0.2em;
text-transform: uppercase;
text-decoration: none;
}
.nav_sidebar_link:before {
content: "";
position: absolute;
top: 0.3rem;
left: 0;
width: 1.2rem;
height: 1.2rem;
border: 1px solid #FFFFFF;
border-radius: 50%;
}
.nav_sidebar_link:hover:before {
background-color: #fff;
}
.nav_sidebar_link:active:before {
background-color: #fff;
}
.nav_sidebar_link_active:before {
background-color: #fff;
}
<ul class="nav_sidebar who-mod">
<li class="nav_sidebar_item"><a id="newhomes" href="#newhomes-anchor" class="nav_sidebar_link">new homes</a></li>
<li class="nav_sidebar_item"><a id="investments" href="#investments-anchor" class="nav_sidebar_link">investments</a></li>
<li class="nav_sidebar_item"><a href="#acquisitions-anchor" id="acquisitions" class="nav_sidebar_link">Acquisitions
and Disposals</a></li>
<li class="nav_sidebar_item"><a href="#lettings-anchor" id="lettings" class="nav_sidebar_link">Lettings
and management</a></li>
</ul>

每次更改时,您都可以将活动项的id存储在localStorage中。然后,在页面加载时,检索这个id,并为这个元素指定活动类。

const box = document.querySelectorAll('.nav_sidebar_link');
let prevActive = localStorage.getItem('activeId');
if(prevActive) document.getElementById(prevActive).classList.add('nav_sidebar_link_active')
for (let i = 0; i < box.length; i++) {
box[i].onclick = function() {
for (let j = 0; j < box.length; j++) {
box[j].classList.remove('nav_sidebar_link_active');
}
this.classList.add('nav_sidebar_link_active');
localStorage.setItem('activeId', this.id);
}
}

演示

在页面加载时从本地存储获取active-link

那么对于每个框,你所做的都是正确的。每当单击其中任何一个框时,从其余框中删除该类,然后将该类添加到当前单击的框中。最后使用localStorage.setItem在localStorage中设置项目

我刚刚用函数循环语法替换了经典的for循环语法。

const activeClass = "nav_sidebar_link_active";
const inactiveClass = ".nav_sidebar_link";
const storageKey = "active-link";
const activeLink = localStorage.getItem(storageKey);
if (activeLink) {
//add active class if the value retrieved from localStorage is not null
document.querySelector(`#${activeLink}`).classList.toggle(activeClass);
}

const box = document.querySelectorAll(inactiveClass);
box.forEach((b) => {
//add event listener to each box
b.onclick = (e) => {
//remove active class from all boxes except this one
box.forEach((boxItem) => {
if (boxItem.id != b.id) {
boxItem.classList.remove(activeClass);
}
});
//set the class of current box and store it in localStorage
e.target.classList.toggle(activeClass);
localStorage.setItem(storageKey, e.target.id);
};
});

最新更新