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

Как обновлять данные массива, чтобы по нажатию на кнопку на странице добавлялся еще один элемент массива?

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <h2>Домашняя библиотека</h2>
    <script src="index.js"></script>
  </body>
</html>


let button = document.createElement('button');
button.textContent = 'Добавить книгу';
let buttonSearch = document.createElement('button');
buttonSearch.textContent = 'Найти книгу';
document.body.append(button);
document.body.append(buttonSearch);

let arr = [
  'Мастер и Маргарита',
  'Гарри Поттер',
  'Над пропастью во ржи',
  'Властелин Колец',
  'Дюна',
  'Отцы и дети',
];

function renderList(arr) {
  const listEL = document.createElement('ul');
  for (i = 0; i < arr.length; i++) {
    const liEl = document.createElement('li');
    liEl.textContent = `${i + 1}) ${arr[i]}`;
    listEL.append(liEl);
  }
  document.body.append(listEL);
}
renderList(arr);

button.onclick = function book() {
  let book = prompt('Введите название книги');
  if (book === '') {
    alert('Название книги не введено!');
  }
  arr.push(book);
renderList(arr);
};


Пока что добавляется ЕЩЁ ОДИН массив целиком. А как вызвать обновление данных, чтобы не массив целиком добавлялся еще один на страницу, а добавлялся лишь еще один элемент к уже имеющемуся массиву? То есть в изначальном массиве 6 элементов. Как сделать так, чтобы при нажатию на кнопку и добавлению еще одного элемента в массив сделать так, чтобы обновлялся уже имеющийся массив, а не добавлялся еще один новый целиком?

Спасибо за помощь!
  • Вопрос задан
  • 735 просмотров
Подписаться 3 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 4
Fragster
@Fragster
помогло? отметь решением!
заменить
let arr = [
  'Мастер и Маргарита',
...
];
на
let arr = [
  {title: 'Мастер и Маргарита', el: null},
...
];
и вместо безусловного создания элемента - проверять его существование и обновлять содержимое при необходимости
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
каждый вызов renderList создаёт новый <ul> и докидывает его в body — отсюда и стопка списков. выноси listEl наружу и удаляй перед рендером:

let listEl;

function renderList(arr) {
  if (listEl) listEl.remove();
  listEl = document.createElement('ul');
  for (let i = 0; i &lt; arr.length; i++) {
    const liEl = document.createElement('li');
    liEl.textContent = `${i + 1}) ${arr[i]}`;
    listEl.append(liEl);
  }
  document.body.append(listEl);
}


или вместо перерисовки всего списка — добавляй только один новый li к уже существующему.
Ответ написан
Комментировать
1. весь html вынести в html.
2. Проверять существование списка, даже если вы не вынесли html из js.
3. Либо стерать элементы из ul, либо просто в конец добавлять новый элемент в ul.
Ответ написан
Комментировать
@Android1983
Создать полноценную страницу со всеми полями списка, a в кнопке сделать добавления элемента как в массив так и в список через innerHtml, то есть не грузить из массива а просто показывать из введённых данных. Ну а на странице у списка свойство display: none если в списке нет ещё элементов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы