К примеру, у нас есть какой-то 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>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть канвас, на нем сетка, которую можно перерисовывать по нажатию на кнопки
Есть таймлайн на сайте, при попытке редактировать текст(уменьшить количество символов), вся верстка едет к чертямНе понимаю в чем дело CSS:
Пару раз сталкивался с сайтами, на которых нельзя посмотреть стили страницы, те допустим я сижу с хрома, и кликая правой кнопкой мыши - ноль...
Я через сервлет вывожу информацию из MySQL в виде таблицы (name и surname)Он работает правильно, но когда выводится таблица он без линии между ячейками