gpt4 book ai didi

Javascript 从 X 元素中添加/删除类但 1

转载 作者:行者123 更新时间:2023-11-30 15:28:35 25 4
gpt4 key购买 nike

所以我有这些 flex 面板,当我点击其中一个时我添加了两个类,但是当我点击另一个时我想从其他 flex 中删除类并仅应用于当前被点击的 flex beeing。上面的代码是我到目前为止提出的。它有效,但还有其他“干净/优雅”的方法吗?

<div class="panels">
<div class="panel panel1">
<p>Hey</p>
<p>Let's</p>
<p>Dance</p>
</div>
<div class="panel panel2">
<p>Give</p>
<p>Take</p>
<p>Receive</p>
</div>
<div class="panel panel3">
<p>Experience</p>
<p>It</p>
<p>Today</p>
</div>
<div class="panel panel4">
<p>Give</p>
<p>All</p>
<p>You can</p>
</div>
<div class="panel panel5">
<p>Life</p>
<p>In</p>
<p>Motion</p>
</div>
</div>

JS 片段:

const panels = document.querySelectorAll('.panel');

function toggleOpen(){
panels.forEach(panel => panel.classList.remove('open','open-active'));
this.classList.toggle('open');
this.classList.toggle('open-active');
}
panels.forEach(panel => panel.addEventListener('click', toggleOpen));

最佳答案

您可以在父元素上监听冒泡的 click 事件。随着使用 closest方法(FF & Chrome),代码可以简化为:

const panels = document.querySelector('.panels');

panels.addEventListener('click', function(e) {
const panel = panels.querySelector('.open');
if (panel) panel.classList.remove('open', 'open-active');
e.target.closest('.panel').classList.add('open', 'open-active');
});

或者,使用一个能记住当前选定面板的闭包:

(function (panels, panel) {
panels.addEventListener('click', function(e) {
if (panel) panel.classList.remove('open', 'open-active');
(panel = e.target.closest('.panel')).classList.add('open', 'open-active');
});
})(document.querySelector('.panels'));

关于Javascript 从 X 元素中添加/删除类但 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42587093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com