fAntonM
@fAntonM
веб-разработчик, дизайнер

СreateElement — как взаимодействовать с созданным элементом?

Здравствуйте, коллеги!

Столкнулся с такой проблемой.
При определенном медиазапросе нужно было добавить 3 элемента внутрь родителя с теми же классами. Всего должно быть 6 одинаковых элементов с одним классом. Роль элементом - кнопки для кликов.
Когда я создал один дополнительный элемент через сreateElement - все работало, я мог кликать по нему, интерактив был.
НО, когда через цикл for я создал сразу 3 элемента, связь прекратилась. Я не мог взаимодействовать ни с одним из вновь созданных элементов.

Вопрос:
Как взаимодействовать с псевдомассивом созданных элементов в моем случае? Работаю на нативном JS.

Вот код:

/*Суда добавляем еще 3 div*/
 <div class="wrapper">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
</div>


// JS
// Первый вариант - Добавляем 1 элемент - все работает
function addDiv() {
  if (mediaWidth.matches) {
 newBox.classList.add('box');
  box[2].after(newBox);
  newBox.innerHTML= '0';
 } else {
    newBox.remove();
 }
}
addDiv();


// Второй вариант - НЕ работает интерактив
// Добавляем 3 DIV сразу через цикл For и append родителя Wrapper
function addDiv() {
      if (mediaWidth.matches) {
        for (let i = 0; i < 3; i++) {
          const newBox = document.createElement('div');
          newBox.classList.add('box');
          wrapper.append(newBox);
          newBox.innerHTML = '0';
          // console.log(newBox.length); выдает Undefined
        }
      }
    }
    addDiv();
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
bingumd
@bingumd
...
const box = []

function addDiv() {
      if (mediaWidth.matches) {
        for (let i = 0; i < 3; i++) {
          const newBox = document.createElement('div');

          newBox.classList.add('box');
           newBox.innerHTML = '0';
           box.push(newBox)

          wrapper.append(newBox);
          // console.log(newBox.length); выдает Undefined
        }
      }
}
addDiv();

 console.log(box) // новые элементы
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alekcena
Нелинейный наставник
1) Вы создаёте константу в цикле? - Константа не изменяемая переменная.( Неправильно ) В цикле она определяется минимум 3 раза)
2) С чего вы взяли что у него есть длина? Это дом элемент. Длина существует только в итерируемых объектах.
3) У вас всё должно работать вы в wraper добавили 3 элемента. Его и выведите в консоль
Ответ написан
fAntonM
@fAntonM Автор вопроса
веб-разработчик, дизайнер
Всем спасибо.
Получено кроме моего, 2 решения, от Вадим и от bingumd

+ мое решение без JS
Создал сразу 6 элементов в HTML, три спрятал через display none. На мобилке показал их. Все.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 05:21
2000 руб./за проект
28 нояб. 2024, в 05:18
500 руб./за проект
28 нояб. 2024, в 03:51
3500 руб./за проект