I've repetitive variables declarations, I think they can be improved with a for-loop, but my attempt fail.
I tried a for-loop declarer for an array but my syntax doesn't work.
I've this "Working code":
<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"); });
}
My attempt to reduce it it was this:
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"); });
}
}
expected result:
the same result as the "Working code":
when I click on a "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>
actual error messages: "Unexpected token =" "Uncaught TypeError: MENU[0][i].addEventListener is not a function"
Edit: I've found the HUGE syntax error, is fixed but I get this error now.
Edit2: My question was too open and not specific, I narrow it down and corrected some syntax suggested by comments.
Edit3: I'm trying to:
click a "menu1" element to select all "menu1" elements. click a "menu2" element to select all "menu2" elements. click a "menu3" element to select all "menu3" elements. click a "menu4" element to select all "menu4" elements.
+sign after firstiit should be something likeMENU.push("menu" + i + "=document.getElementsByClassName('menu" + i +"')");- nonameclasses? instead of calling classesmenu1, menu2etc. you could have one classmenuand if needed in your css style each class like.menu:first-child, .menu:nth-child(2)etc then your code would be much easier only one call tovar menus = document.getElementsByClassName('menu');and in variablemenusyou have array of elements - noname