我需要“移动”活动类一个接一个地到这5个div元素,但使用非常基本的js,因为仍然在学习基础知识,我发现这个解决方案,它工作,但我想在for循环中转换它,没有任何函数,foreach循环,只有非常基本的?谢谢
这是我的解决方案:
next.addEventListener('click', function(){
let current = document.querySelector('.active')
if(current.classList.contains('active')){
imgItems[1].classList.add('active')
imgItems[0].classList.remove('active')
}
if (current.classList.contains('active')) {
imgItems[1].classList.remove('active')
imgItems[2].classList.add('active')
}
if (current.classList.contains('active')) {
imgItems[2].classList.remove('active')
imgItems[3].classList.add('active')
}
if (current.classList.contains('active')) {
imgItems[3].classList.remove('active')
imgItems[4].classList.add('active')
}
})
我尝试了很多次,在线解决方案很好,但对我来说太先进了,我只学习了数组和循环。
3条答案
按热度按时间uttx8gqw1#
假设这些项在DOM中是相邻的,您可以使用
nextElementSibling
转到下一项。2skhul332#
给你
JavaScript没有foreach循环。它已经为.. in loop,for ..循环和普通C型循环。在本例中,我使用了后者,因为我们要使用索引。
看起来你打算将
active
类级联到某个imgItems
集合的末尾,所以想法是从0到3循环一个index
,每次检查current
是否有一个active
类,然后从我们当前索引上的实际元素中删除该类,并将该类添加到下一个。你也可以不使用循环,像这样:基本上,我们使用spread操作符([...]部分)将类似数组的对象
imgItems
转换为数组,并在事件中获取数组中current的索引,如果它不是最后一个,则删除活动类并将其添加到下一个。r1zhe5dt3#
这是一种稍微成熟一点的方法--不一定是你要求的“非常基本”的方法--它允许按下
<button>
来浏览元素列表;代码中有解释性注解,以便您和其他人可以从中学习:JS Fiddle demo。
请注意,在上面的演示中,如果没有类名与
activeClassName
匹配的元素,或者有多个类与该类名匹配,则没有错误处理。如果需要这样做,你需要自己实现它,或者问一个问题,如果你不能写这样的代码,它可能/应该如何处理。下面的演示展示了可能的自定义的一种用法(请记住美学是可怕的,因为这仅仅是一个概念验证):
JS Fiddle demo。
参考文献:
Array.from()
。Array.prototype.at()
。Array.prototype.find()
。Array.prototype.filter()
。Array.prototype.map()
。document.querySelector()
。document.querySelectorAll()
。Element.classList
API。Element.closest()
。EventTarget.addEventListener()
。HTMLElement.dataset
API。String.prototype.toLowerCase()
。