Экспорт списка в HTML в JavaScript

Экспорт списка в HTML в JavaScript

Экспорт списка в 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.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий