mk3mk
@mk3mk
занимаюсь вёрсткой (иногда)

Как связать элементы двух массивов?

есть два массива. Ну, вернее, это элементы одного класса, и элементы другого класса. Получается, что это два массива. Надо, чтобы при клике на первый элемент первого массива мы получали первый элемент второго массива, при клике на второй элемент - второй и т.д. Т.е. есть ли какой-то способ получать по индексу элементы второго массива. Я сделал пример, где есть 5 квадратов - кнопок, и есть 5 квадратов - целей. Хочу при клике на первый "квадрат - кнопку" покрасить первый "квадрат - цель" и т.д.
https://codepen.io/mk3mk/pen/YBxPZj?editors=0011
  • Вопрос задан
  • 670 просмотров
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
У вас уже в коде куча ошибок.
1) вместо querySelector нужно использовать querySelectorAll, т.к. первый возвращает только один элемент, а второй массив элементов.
2) Чтобы назначить событие группе элементов, недостаточно как в jQuery написать одной строчкой onclick, нужно циклом пройтись по каждому элементу, и повесить на нужное событие обработчик.
3) Можно воспользоваться замыканием, т.е. использовать в качестве общего индекса для массивов, индекс в цикле.

https://codepen.io/anon/pen/RvZaQW?editors=0111
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const buttons = document.querySelectorAll('.item1');
const targets = document.querySelectorAll('.item2');
const className = 'red';

const updateClass = action => ({ target: t }) => {
  const index = Array.prototype.indexOf.call(buttons, t);
  if (index !== -1) {
    targets[index].classList[action](className);
  }
};

const wrapper = document.querySelector('#wrap1');
wrapper.addEventListener('click', updateClass('add'));
wrapper.addEventListener('dblclick', updateClass('remove'));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект