Задать вопрос
Alexander3928
@Alexander3928

Как задать 2 элементу класс active?

Делаю динамические элементы обьектом и методом map. Как задать 2 элементу с классом navigation__item класс active?

let objectNavigation = [
      { image: "./src/img/about/show/desine.jpeg" },
      { image: "./src/img/about/show/front.jpeg" },
      { image: "./src/img/about/show/ux.jpeg" },
    ];

const navigation = document.createElement("div");
navigation.classList.add("navigation", "scroll-animation-item");

objectNavigation.map((element, index) => {
      let result = `
        <div class="navigation__item">
          <img src="${element.image}">
        </div>
      `;

      navigation.innerHTML += result;
    });
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Кому и какой надо добавить класс:

const index = 1;
const className = 'active';

Можно при создании элементов проверять, чему равен текущий индекс:

navigation.innerHTML = objectNavigation
  .map((n, i) => `
    <div class="${i === index ? className : ''}">
      <img src="${n.image}">
    </div>`)
  .join('');

или

navigation.append(...objectNavigation.map((n, i) => {
  const div = document.createElement('div');
  const img = document.createElement('img');
  img.src = n.image;
  div.append(img);
  div.classList.toggle(className, i === index);
  return div;
}));

или

for (const [ i, n ] of objectNavigation.entries()) {
  navigation.appendChild(document.createElement('div'));
  navigation.lastChild.appendChild(new Image);
  navigation.lastChild.lastChild.src = n.image;
  navigation.lastChild.className = i === index ? className : '';
}

Другой вариант - добавлять класс после того, как все элементы будут созданы:

navigation.children[index]?.classList.add(className);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
s3ttlezy
@s3ttlezy
micro frontender
как вам идея добавить в объект "objectNavigation" еще один ключ, который определяет наличие класса active для будущего элемента?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽