К примеру, у нас есть какой-то div, при нажатии на ссылку которого происходит смена класса в другом диве:
function active(element) {
//Очищаем все уже нажатые элементы
for (var i = 1; i < N; i++) {
var clear = document.getElementById("tab_" + i);
clear.className = "cont" + i;
}
//Присваиваем новый класс нажатому элементу
var block = document.getElementById("tab_" + element);
if (block.className == "cont" + element) {
block.className = "cont" + element + " is_active";
}
}
<div><a href="#" onclick="active('1');">Смени меня</a></div>
<div><a href="#" onclick="active('2');">Смени меня</a></div>
<div id="tab_1" class="cont1 is_active">
<p>Первый див</p>
</div>
<div id="tab_2" class="cont2">
<p>Второй див</p>
</div>
Из кода видно, что функция active вызывается при нажатии на конкретную ссылку через onclick. Но как сделать вызов этой функции, чтобы в атрибутах стоял только id? Как должен измениться JS, кроме того, что он станет каким-то "пассивным" обработчиком? Могу ошибаться в формулировке.
Может слегка костыльно, но написал на коленке.
[...document.querySelectorAll("a")].forEach((item, index) => {
item.addEventListener("click", (e) => {
let foo = document.querySelectorAll("p");
for (var i = 0; i < foo.length; i++) {
if (foo[i].classList.contains("active")) {
foo[i].classList.remove("active");
} else {
foo[index].classList.add("active");
}
}
});
});
.active {
background: pink;
}
<a href="#">Click me 1</a>
<a href="#">Click me 2</a>
<p>Some text 1</p>
<p>Some text 2</p>
Вот так, наверное, попытался не трогать вашу оригинальную функцию active(element)
function active(element) {
//Очищаем все уже нажатые элементы
for (var i = 1; i < 3; i++) {
var clear = document.getElementById("tab_" + i);
clear.className = "cont" + i;
}
//Присваиваем новый класс нажатому элементу
var block = document.getElementById("tab_" + element);
if (block.className == "cont" + element) {
block.className = "cont" + element + " is_active";
}
}
[].slice.call(document.querySelectorAll('.clickable'))
.forEach((el, i) => el.onclick = active.bind(null, i+1));
.is_active{
background-color: red;
}
<div><a href="#" class='clickable'>Смени меня</a></div>
<div><a href="#" class='clickable'>Смени меня</a></div>
<div id="tab_1" class="cont1 is_active">
<p>Первый див</p>
</div>
<div id="tab_2" class="cont2">
<p>Второй див</p>
</div>
Продвижение своими сайтами как стратегия роста и независимости