Javascript 在多个元素上切换类的最佳实践

Javascript 在多个元素上切换类的最佳实践,javascript,css,Javascript,Css,如果你看看我的HTML和CSS,我有一个相当直截了当的问题,但作为一个JSNoob,我想不出一个直截了当的答案 我有一堆按钮,后面是一堆隐藏的div。隐藏的div绝对位于按钮顶部,不透明度为:0。我希望每个按钮在相应的div上切换.show类,以显示它 有没有一种优雅的方法可以在不重复代码的情况下使用javascript实现这一点?我不想使用jquerytbh 非常感谢 *,:之后,:之前{ -webkit框大小:边框框; -moz框大小:边框框; 框大小:边框框 } .包装纸{ 显示:网格;

如果你看看我的HTML和CSS,我有一个相当直截了当的问题,但作为一个JSNoob,我想不出一个直截了当的答案

我有一堆按钮,后面是一堆隐藏的div。隐藏的div绝对位于按钮顶部,不透明度为:0。我希望每个按钮在相应的div上切换.show类,以显示它

有没有一种优雅的方法可以在不重复代码的情况下使用javascript实现这一点?我不想使用jquerytbh

非常感谢

*,:之后,:之前{
-webkit框大小:边框框;
-moz框大小:边框框;
框大小:边框框
}
.包装纸{
显示:网格;
网格模板列:1fr;
填充:8px;
边界半径:6px;
位置:相对位置;
}
.btn{
填充:10px;
边界半径:6px;
利润率:8px;
背景色:#ddd;
}
a、 btn{
颜色:蓝色;
字体大小:粗体;
文字装饰:无;
字体系列:“Gill Sans”,“Gill Sans MT”,“Calibri”,“Trebuchet MS”,无衬线;
过渡:0.3s;
}
a、 btn:悬停{
背景色:#ccc;
过渡:0.3s;
}
.覆盖{
位置:绝对位置;
宽度:100%;
身高:100%;
排名:0;
左:0;
填充:10px;
不透明度:0;
可见性:隐藏;
}
.show{不透明度:1;可见性:可见;}
#panel1{背景色:珊瑚;}
#面板2{背景色:矢车菊蓝;}
#面板3{背景色:暗金色;}
#panel4{背景色:暗绿色;}
#panel5{背景色:深粉色;}

按类获取所有需要的元素并分配事件侦听器。查看每个代码块上的注释,了解其工作原理:

//所有按钮只需一个函数
功能BTN单击(e){
//从单击的按钮获取链接元素
设btn=e.target.nexist('a');
//从id获取号码
让num=btn.id.replace('btn','');
//显示面板
document.querySelector('#panel'+num).classList.toggle('show');
}
功能面板关闭(e){
e、 target.closest('div').classList.toggle('show');
}
//获取所有按钮
设btns=document.queryselectoral('.btn');
forEach(btn=>btn.addEventListener('click',btnClick));
//获取所有关闭链接
设cls=document.querySelectorAll('.overlay a');
cls.forEach(cl=>cl.addEventListener('click',panelClose))
*,:之后,:之前{
-webkit框大小:边框框;
-moz框大小:边框框;
框大小:边框框
}
.包装纸{
显示:网格;
网格模板列:1fr;
填充:8px;
边界半径:6px;
位置:相对位置;
}
.btn{
填充:10px;
边界半径:6px;
利润率:8px;
背景色:#ddd;
}
a、 btn{
颜色:蓝色;
字体大小:粗体;
文字装饰:无;
字体系列:“Gill Sans”,“Gill Sans MT”,“Calibri”,“Trebuchet MS”,无衬线;
过渡:0.3s;
}
a、 btn:悬停{
背景色:#ccc;
过渡:0.3s;
}
.覆盖{
位置:绝对位置;
宽度:100%;
身高:100%;
排名:0;
左:0;
填充:10px;
不透明度:0;
可见性:隐藏;
}
.show{不透明度:1;可见性:可见;}
#panel1{背景色:珊瑚;}
#面板2{背景色:矢车菊蓝;}
#面板3{背景色:暗金色;}
#panel4{背景色:暗绿色;}
#panel5{背景色:深粉色;}

按类获取所有需要的元素并分配事件侦听器。查看每个代码块上的注释,了解其工作原理:

//所有按钮只需一个函数
功能BTN单击(e){
//从单击的按钮获取链接元素
设btn=e.target.nexist('a');
//从id获取号码
让num=btn.id.replace('btn','');
//显示面板
document.querySelector('#panel'+num).classList.toggle('show');
}
功能面板关闭(e){
e、 target.closest('div').classList.toggle('show');
}
//获取所有按钮
设btns=document.queryselectoral('.btn');
forEach(btn=>btn.addEventListener('click',btnClick));
//获取所有关闭链接
设cls=document.querySelectorAll('.overlay a');
cls.forEach(cl=>cl.addEventListener('click',panelClose))
*,:之后,:之前{
-webkit框大小:边框框;
-moz框大小:边框框;
框大小:边框框
}
.包装纸{
显示:网格;
网格模板列:1fr;
填充:8px;
边界半径:6px;
位置:相对位置;
}
.btn{
填充:10px;
边界半径:6px;
利润率:8px;
背景色:#ddd;
}
a、 btn{
颜色:蓝色;
字体大小:粗体;
文字装饰:无;
字体系列:“Gill Sans”,“Gill Sans MT”,“Calibri”,“Trebuchet MS”,无衬线;
过渡:0.3s;
}