Моя вложенная функция работает не так, как хотелось бы - PullRequest
1 голос
/ 28 мая 2020

Моя makeRows функция работает не так, как я ожидал, я не уверен, правильно ли я поступаю. Когда я нажимаю «очистить все», запускается приглашение для создания новых строк и столбцов, но класс mouseOver не добавляется обратно ко всей сетке, а только к нижней части.

const container = document.getElementById("container");

function makeRows(rows, cols) {
  container.style.setProperty("--grid-rows", rows);
  container.style.setProperty("--grid-cols", cols);
  for (c = 0; c < rows * cols; c++) {
    const cell = document.createElement("div");
    container.appendChild(cell).className = "grid-item mouseOver";
  }
}

window.onload = makeRows(16, 16);

const btn = document.querySelector("button");
const div = container.getElementsByTagName("div");

function reset() {
  [].forEach.call(div, function (el) {
    el.classList.remove("mouseOver");
  });
  let num = prompt("How many rows and cols?");
  makeRows(num, num);
}

btn.addEventListener("click", reset);
:root {
  --grid-cols: 1;
  --grid-rows: 1;
}

#container {
  display: grid;
  grid-template-rows: repeat(var(--grid-rows), 1fr);
  grid-template-columns: repeat(var(--grid-cols), 1fr);
}

.grid-item {
  padding: 1rem;
  border: 1px solid #ddd;
  text-align: center;
}

.mouseOver {
  transition: 0s 10s;
}

.mouseOver:hover {
  background-color: aqua;
  transition: 0s;
}

#btn {
  max-width: 100%;
  width: 100%;
  padding: 1rem;
  margin-bottom: 1rem;
  margin-top: 1rem;
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Etch-A-Sketch</title>
    <link rel="stylesheet" href="etch.css" />
  </head>
  <header>
    <button id="btn">Clear All</button>
  </header>
  <body>
    <div id="container"></div>
  </body>
  <footer>
    <script src="etch-script.js"></script>
  </footer>
</html>

1 Ответ

1 голос
/ 28 мая 2020

Чтобы удалить все элементы с классом grid-item, используйте эту итерацию в вашей функции сброса:

function reset() {
  document.querySelectorAll('.grid-item').forEach(e => e.parentNode.removeChild(e));
  let num = prompt("How many rows and cols?");
  makeRows(num, num);
}

Это выбирает все элементы с классом grid-item, и для каждого найденного div он выбирает свой родительский узел и удаляет Сам с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...