Я застрял с этим исключением DOM. У меня есть элементы div и кнопка - когда пользователь нажимает на кнопку, выбирается случайный div, к которому добавляется другой div. Этот другой div имеет класс с установленным фоновым цветом. Другими словами, когда пользователь нажимает кнопку, случайный контейнер div заполняется другим случайным цветным div. Затем я хочу, чтобы пользователь мог перетащить этот вновь созданный и окрашенный div в пустой. Вот тут и возникает проблема. Вот моя разметка:
<div class="row">
<div class="empty border"></div>
<div class="empty border"></div>
<div class="empty border"></div>
<div class="empty border"></div>
<div class="empty border"></div>
<div class="empty border"></div>
</div>
После нажатия кнопки (добавляется новый элемент div) это выглядит так:
<div class="row">
<div class="empty border"></div>
<div class="empty border">
<div class="filled" draggable="true" id="test
style="background-color: rgb(242, 202, 185);"></div>
</div>
<div class="empty border"></div>
<div class="empty border"></div>
<div class="empty border"></div>
<div class="empty border"></div>
</div>
Итак, когда «заполненный» div сбрасывается в зону сброса (пустой div), я получаю это необученное исключение. Вот мой JS:
const prepareForDrag = () => {
let divElements = Array.from(document.getElementsByTagName('div'));
let emptyCubes = divElements.filter(cube => cube.classList.contains('empty'));
let filledCubes = divElements.filter(cube => cube.classList.contains('filled'));
emptyCubes.forEach(function (cube) {
cube.addEventListener('dragover', dragOver);
cube.addEventListener('drop', drop);
})
filledCubes.forEach(function (cube) {
cube.addEventListener('dragstart', dragStart);
})
function dragStart (e) {
emptyCubes.forEach(cube => cube.classList.add('dropzone-border'));
e.dataTransfer.setData('text/plain', e.target.getAttribute('id'));
}
function dragOver (e) {
e.preventDefault();
}
function drop (e) {
let coloredCube = e.dataTransfer.getData('text/plain');
e.target.appendChild(document.getElementById(coloredCube));
emptyCubes.forEach(cube => cube.classList.remove('dropzone-border'));
}
}
Я ясно понимаю, что когда я отпускаю кнопку мыши, она пытается добавить родительский div и заполненный, но я действительно не могу найти решение. Буду очень признателен за любую помощь и жестокую критику:)