【发布时间】:2019-08-28 20:44:16
【问题描述】:
我有重复的变量声明,我认为可以通过 for 循环对其进行改进,但我的尝试失败了。
我尝试了一个数组的 for 循环声明器,但我的语法不起作用。
我有这个“工作代码”:
<div class ="menu1 item1-1"></div>
<div class ="menu1 item1-2"></div>
<div class ="menu1 item1-3"></div>
<div class ="menu1 item1-4"></div>
<div class ="menu2 item2-1"></div>
<div class ="menu2 item2-2"></div>
<div class ="menu2 item2-3"></div>
<div class ="menu2 item2-4"></div>
<div class ="menu3 item3-1"></div>
<div class ="menu3 item3-2"></div>
<div class ="menu3 item3-3"></div>
<div class ="menu3 item3-4"></div>
<div class ="menu4 item4-1"></div>
<div class ="menu4 item4-2"></div>
<div class ="menu4 item4-3"></div>
<div class ="menu4 item4-4"></div>
var menu1 = document.getElementsByClassName('menu1');
var menu2 = document.getElementsByClassName('menu2');
var menu3 = document.getElementsByClassName('menu3');
var menu4 = document.getElementsByClassName('menu4');
for (let i = 1; i < menu1.length; i++) {
menu1[i].addEventListener('click', function(){ menu1[i].classList.add("test"); });
}
for (let i = 1; i < menu2.length; i++) {
menu2[i].addEventListener('click', function(){ menu2[i].classList.add("test"); });
}
for (let i = 1; i < menu3.length; i++) {
menu3[i].addEventListener('click', function(){ menu3[i].classList.add("test"); });
}
for (let i = 1; i < menu4.length; i++) {
menu4[i].addEventListener('click', function(){ menu4[i].classList.add("test"); });
}
我试图减少它是这样的:
var MENU = [];
for (let i = 1; i <= 4; i++) {
MENU.push("menu" + i + =document.getElementsByClassName('menu' + i +));
}
for (let j = 1; j < 5; j++) {
for (let i = 0; i < MENU[j].length; i++) {
MENU[j][i].addEventListener('click', function(){ MENU[j][i].classList.add("test"); });
}
}
预期结果:
与“工作代码”相同的结果:
当我点击“menu1”div 时:
<div class ="menu1 item1-1 test"></div>
<div class ="menu1 item1-2 test"></div>
<div class ="menu1 item1-3 test"></div>
<div class ="menu1 item1-4 test"></div>
<div class ="menu2 item2-1"></div>
<div class ="menu2 item2-2"></div>
<div class ="menu2 item2-3"></div>
<div class ="menu2 item2-4"></div>
<div class ="menu3 item3-1"></div>
<div class ="menu3 item3-2"></div>
<div class ="menu3 item3-3"></div>
<div class ="menu3 item3-4"></div>
<div class ="menu4 item4-1"></div>
<div class ="menu4 item4-2"></div>
<div class ="menu4 item4-3"></div>
<div class ="menu4 item4-4"></div>
实际错误信息: “意外令牌=” “未捕获的 TypeError:MENU[0][i].addEventListener 不是函数”
编辑:我发现了巨大的语法错误,已修复,但我现在收到此错误。
Edit2:我的问题过于开放且不具体,我缩小范围并更正了 cmets 建议的一些语法。
Edit3:我正在尝试:
单击“menu1”元素以选择所有“menu1”元素。 单击“menu2”元素以选择所有“menu2”元素。 单击“menu3”元素以选择所有“menu3”元素。 单击“menu4”元素以选择所有“menu4”元素。
【问题讨论】:
-
您展示的代码在第一个
i之后缺少+符号,应该类似于MENU.push("menu" + i + "=document.getElementsByClassName('menu" + i +"')"); -
我的另一个考虑是为什么你有这么多
classes?而不是调用类menu1, menu2等。你可以有一个类menu,如果需要在你的css样式中每个类,如.menu:first-child, .menu:nth-child(2)等,那么你的代码会更容易只有一次调用var menus = document.getElementsByClassName('menu');和变量@987654333 @你有元素数组
标签: javascript for-loop variables getelementsbyclassname