@Lion97icvc

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

Добрый день. Испытываю огромные проблемы с пониманием localStorage. У меня есть таблица студентов, в которую я по нажатию кнопки добавляю нового студента, но после обновления таблицы добавленный студент исчезает. Понимаю, что нужно сохранить эту таблицу в localStorage, но не понимаю, как это сделать. Помогите, пожалуйста.
(() => {
  const tHadeArr = ['Фамилия, имя, отчество', 'Факультет', 'Дата рождения', 'Года обучения'];
  const studentsList = [
    {fio: 'Орлов Иван Игоревич', faculty: 'Педагогический', db: '25.09.1982', study: '2018-2022'},
    {fio: 'Орлова Анастасия Сергеевна', faculty: 'Физико-математический', db: '29.07.1997', study: '2015-2019'},
    {fio: 'Ленкина Тея Кахаберовна', faculty: 'Медицинский', db: '16.10.1996', study: '2013-2017'},
    {fio: 'Чертищева Татьяна Викторовна', faculty: 'Медицинский', db: '23.02.1964', study: '2010-2014'},
    {fio: 'Орлов Игорь Олимпиевич', faculty: 'Технический', db: '11.06.1964', study: '2006-2010'}
  ]
  function createCustomEl (tag, text) { //функция чтобы добавить тег для элемента
    const el = document.createElement(tag); //название тега
    if (text) { //если что-то передано в текст
      el.textContent = text; //название тега
    }
    return el;
  }
  function createTHead (arr) {
    const thead = createCustomEl('thead'); //создаем заголовок таблицы
    const row = createCustomEl('tr');
    arr.forEach(str => {
      const cell = createCustomEl('td'); //здесь будет имя столбца
      const btn = createCustomEl('button'); //имя бдет кнопкой для фильтрации
      btn.textContent = str; //название кнопки из массива с заголовками
      cell.append(btn); //добавляем кнопку в строку заголовка таблицы
      row.append(cell); //добавляем заголовки в ряд
    });
    thead.append(row); //добавляем полученные заголовки в таблицу
    return thead; //возвращаем заголовки, чтою их можно было добавить на страницу
  }
  function createStudRow (student) { //создаем таблицу, в которую будем добвлять студентов
    const row = createCustomEl('tr'); //создаем строку для данных о студенте
    const stfio = createCustomEl('td', student.fio); // с помощью функции создаем ячейку и записываем в нее значение и массива с данными о студентах
    const stFacult = createCustomEl('td', student.faculty);
    const stdb = createCustomEl('td', student.db);
    const stStudy = createCustomEl('td', student.study);
    row.append(stfio);
    row.append(stFacult);
    row.append(stdb);
    row.append(stStudy);
    return row;
  }
  function fillTBody (stArr, tBodyEl) { // заполняем таблицу массивом из студентов
    tBodyEl.innerHTML = ''; //отчищаем ячейки
    for (let st of stArr) { //проходи по данным из массива
      const studentRow = createStudRow(st); //записываем в константу результат выполнения функции
      tBodyEl.append(studentRow); //добавляем в ячеку
    }
  }
  function createTable () {
    const table = createCustomEl('table'); //создаем таблицу
    const thead = createTHead (tHadeArr); //создаем заголовки таблицы из массива с заголовками таблицы
    const tbody = createCustomEl('tbody'); //создаем тело для таблицы
    fillTBody(studentsList, tbody); //рисуем таблицу со студентами
    table.append(thead); //добавляем заголовки
    table.append(tbody); //добавляем тело
    return {
      table,
      tbody
    }
  }
  function addStudent (stArr, tbody) { // функция добавления студента из формы
    const studentObj = { // вместо этого заполненного объекта нужно будет передавать в эту переменную данные из формы
      fio: 'Федоров Федор Федорович',
      faculty: 'Технический',
      db: '11.06.1964',
      study: '2006-2010'
    };
    stArr.push(studentObj);
    fillTBody(stArr, tbody);
  }
  function createApp () { //добавляем содержимое в html-вёрстку
    const container = document.querySelector('.conteiner'); // подключаем контейнер
    const tableObj = createTable(); // создаем таблицу
    container.append(tableObj.table); // добавляем в разметку созданную таблицу
    const addBtn = document.querySelector('.add-btn'); // поключаем кнопку
    addBtn.addEventListener('click', () => { // навешиваем событие на кнопку, чтобы при клике срабатывала функция
      addStudent(studentsList, tableObj.tbody); // функция добавления студента из формы.
    });
    localStorage.setItem("myKey",JSON.stringify(studentsList));
  }
createApp(); // запускаем функцию создания всего приложения
})();

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Список студентов</title>
    <link rel="stylesheet" href="style.css">
    <script defer src="main.js"></script>
</head>
<body>
  <div class="conteiner">
    <button class="add-btn">Записать</button>
  </div>
</body>
</html>
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Так у вас уже все готово

function createApp () { //добавляем содержимое в html-вёрстку
    // прочитать список
    studentList = JSON.parse(localStorage.getItem("myKey") ?? '[]');

    const container = document.querySelector('.conteiner'); // подключаем контейнер
    const tableObj = createTable(); // создаем таблицу
    container.append(tableObj.table); // добавляем в разметку созданную таблицу
    const addBtn = document.querySelector('.add-btn'); // поключаем кнопку
    addBtn.addEventListener('click', () => { // навешиваем событие на кнопку, чтобы при клике срабатывала функция
      addStudent(studentsList, tableObj.tbody); // функция добавления студента из формы.
      // При каждом обновлении сохраняем
      localStorage.setItem("myKey",JSON.stringify(studentsList));
    });
    // А это не надо
    // localStorage.setItem("myKey",JSON.stringify(studentsList));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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