Экспорт списка в HTML в JavaScript
Доброго времени суток! Сегодня мы рассмотрим с Вами как можно конвертировать список в HTML таблицу в JavaScript.
Код:
/**
* list - список или массив объектов строк
* columns - колонки, которые должны попасть в экспортируемую таблицу
*/
function list2Html(list, columns)
{
if(0 === list.length)
throw new Error("Нечего экспортировать!");
// функция, которая создает html-код из данных
const html = (headers, rows) => {
const th = headers.map(el => `<th>${el}</th> `).join('');
const trows = rows.map(row => row.map(col => `<td>${col}</td>`).join(''));
return `
<table border="1" style="text-align: center">
<thead>
<tr>${th}</tr>
</thead>
<tbody>
${trows.map(trow => `<tr>${trow}</tr>`).join('')}
</tbody>
</table>
`;
}
const rows = []
/**
* Так как, список у нас состоит из объектов, у которых есть определенные свойства
*
*/
for (const item of list)
{
// мы создаем новый объект, которому добавляем свойства из параметра columns
// чтобы у всех строк было похожее количество столбцов, даже если столбцы пустые
const obj = columns.reduce((result, item) => {
result[item] = "";
return result;
}, {});
// проходимся по каждому свойству объекта, и смотрим есть ли у него такое же свойство
// как и в списке columns, если нет, то значит этот столбец в экспортируемой таблице не нужен
for (const column in item)
{
if(columns.includes(column))
{
obj[column] = item[column];
}
}
// оставляем только значения из объекта
rows.push(Object.values(obj));
}
// формируем и возвращаем html
return html(columns, rows);
}
При нажатии на кнопу экспорта - создаем таблицу и отдаем на загрузке браузеру
function downloadFile(data="", fileName="test.txt", type="text/plain;charset=UTF-8") {
// создаем невидимый элемент ссылки
const a = document.createElement("a");
a.style.display = "none";
document.body.appendChild(a);
// в качестве данных для загрузки из ссылки устанавливаем данные из формы
a.href = window.URL.createObjectURL(
new Blob([data], { type })
);
// атрибут download ссылки используется для загрузки файла
a.setAttribute("download", fileName);
// запускаем загрузку путем эмулирования нажатия клавиши
a.click();
// удаляем ссылку из DOM
document.body.removeChild(a);
}
function exportQuestions()
{
const questions = ...; // данные пришли от API, например, и уже находятся на стороне браузера
const data = list2Html(this.questions, ['title', 'type', 'theme', 'content', 'solution']);
downloadFile(data, `questions_${Date.now()}.html`,'text/html');
return true;
},
Вот таким образом можно экспортировать данные из браузера в HTML с помощью JavaScript.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.