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

Ссылка скопирована
10 марта 2026 1 ответ

Добрый день. Испытываю огромные проблемы с пониманием 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(); // запускаем функцию создания всего приложения })();

(() => { 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>

<!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>

Дополнительно:

Так у вас уже все готово

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)); }

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)); }

  • Кстати, шаблонные строки будут и нагляднее, и вставка сразу целой строки в innerHTML происходит быстрее, чем поочередное создание каждого элемента
    function createStudRow (student) {     return `         <tr>             <td>${student.fio}</td>             <td>${student.faculty}</td>             <td>${student.db}</td>             <td>${student.study}</td>         </tr>     `; }

    function createStudRow (student) { return ` <tr> <td>${student.fio}</td> <td>${student.faculty}</td> <td>${student.db}</td> <td>${student.study}</td> </tr> `; }

  • Не сработало, он ругается на studentsList = localStorage.getItem("myKey");

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

  • Lion97icvc, объявите список как переменную, через let
  • Сергей delphinpro, Спасибо, попробую)
  • Сергей delphinpro, тоже не сработало, теперь он не добавляет в массив новый элемент
  • Lion97icvc, это потому что у вас опечатка в функции createTable
    - fillTBody(studentsList, tbody); //рисуем таблицу со студентами + fillTBody(studentList, tbody); //рисуем таблицу со студентами

    - fillTBody(studentsList, tbody); //рисуем таблицу со студентами + fillTBody(studentList, tbody); //рисуем таблицу со студентами

    https://codepen.io/delphinpro/pen/oNQzMNL

  • Сергей delphinpro, Благодарю за помощь. При клики несколько раз записать он добавляет несколько одинаковых фамилий, обновляю страницу и все остается на своих местах, но при добавлении (после обновления страницы) новых записей он стирает все ранее добавленные записи, которые были сделаны до обновления страницы.
  • Сергей delphinpro, немного поправила код, вроде все работает как нужно. Спасибо Вам огромное за помощь).
  • Lion97icvc, так пометь ответ решением.
    Уважай себя и других, а в особенности ответившего.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

Для сохранения таблицы, в которую вы добавили элемент через JavaScript, после обновления страницы, вам нужно использовать методы хранения данных, такие как localStorage или sessionStorage.

Прежде всего, у вас должна быть функция, которая добавляет элементы в таблицу через JavaScript. Например, если у вас есть таблица с id "myTable" и вы добавляете строки в нее, ваш код может выглядеть примерно так:

function addRow() {
  var table = document.getElementById("myTable");
  var row = table.insertRow();
  var cell1 = row.insertCell(0);
  var cell2 = row.insertCell(1);
  cell1.innerHTML = "Новая ячейка 1";
  cell2.innerHTML = "Новая ячейка 2";
}

function addRow() { var table = document.getElementById("myTable"); var row = table.insertRow(); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); cell1.innerHTML = "Новая ячейка 1"; cell2.innerHTML = "Новая ячейка 2"; }

Теперь, чтобы сохранить состояние таблицы после обновления страницы, вы можете использовать localStorage. Вот как это можно сделать:

// Проверяем, есть ли данные в localStorage
if(localStorage.getItem("tableData")) {
  // Если есть, восстанавливаем таблицу из данных в localStorage
  document.getElementById("myTable").innerHTML = localStorage.getItem("tableData");
}
 
// Добавляем элемент в таблицу и сохраняем данные в localStorage
function addRow() {
  var table = document.getElementById("myTable");
  var row = table.insertRow();
  var cell1 = row.insertCell(0);
  var cell2 = row.insertCell(1);
  cell1.innerHTML = "Новая ячейка 1";
  cell2.innerHTML = "Новая ячейка 2";
 
  // Сохраняем данные таблицы в localStorage
  localStorage.setItem("tableData", table.innerHTML);
}

// Проверяем, есть ли данные в localStorage if(localStorage.getItem("tableData")) { // Если есть, восстанавливаем таблицу из данных в localStorage document.getElementById("myTable").innerHTML = localStorage.getItem("tableData"); } // Добавляем элемент в таблицу и сохраняем данные в localStorage function addRow() { var table = document.getElementById("myTable"); var row = table.insertRow(); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); cell1.innerHTML = "Новая ячейка 1"; cell2.innerHTML = "Новая ячейка 2"; // Сохраняем данные таблицы в localStorage localStorage.setItem("tableData", table.innerHTML); }

Теперь, когда вы добавляете новый элемент в таблицу через JavaScript, данные таблицы будут сохранены в localStorage. При обновлении страницы данные будут восстановлены из localStorage и таблица останется в том же состоянии, в котором вы ее оставили.

Обратите внимание, что localStorage имеет ограничение на объем данных (обычно около 5-10 МБ), поэтому не злоупотребляйте его использованием. Если у вас большой объем данных или требуется сохранять их более долгое время, то лучше использовать серверное хранилище данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно