Создание сортируемой таблицы с помощью HTML и JavaScript — это отличный способ улучшить взаимодействие с пользователем на вашем веб-сайте. В этом ответе мы рассмотрим, как можно создать такую таблицу с нуля.

Шаг 1: Создание HTML-структуры таблицы

Первым делом, необходимо создать базовую разметку для нашей таблицы. Ниже приведен пример простой таблицы с заголовками:

<table id="myTable" border="1">
    <thead>
        <tr>
            <th onclick="sortTable(0)">Имя</th>
            <th onclick="sortTable(1)">Возраст</th>
            <th onclick="sortTable(2)">Город</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Иван</td>
            <td>30</td>
            <td>Москва</td>
        </tr>
        <tr>
            <td>Анна</td>
            <td>25</td>
            <td>Санкт-Петербург</td>
        </tr>
        <tr>
            <td>Петр</td>
            <td>35</td>
            <td>Казань</td>
        </tr>
    </tbody>
</table>

В этом примере у нас есть таблица с тремя столбцами: Имя, Возраст и Город. Мы добавили обработчик событий onclick к заголовкам, чтобы они вызывали функцию сортировки при нажатии.

Шаг 2: Написание функции JavaScript для сортировки

Теперь нужно написать функцию sortTable, которая будет сортировать строки таблицы. Вот пример реализации:

<script>
function sortTable(columnIndex) {
    var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
    table = document.getElementById("myTable");
    switching = true;
    dir = "asc"; // Устанавливаем направление сортировки по возрастанию

    while (switching) {
        switching = false;
        rows = table.rows;

        for (i = 1; i < (rows.length - 1); i++) {
            shouldSwitch = false;
            x = rows[i].getElementsByTagName("TD")[columnIndex];
            y = rows[i + 1].getElementsByTagName("TD")[columnIndex];

            if (dir == "asc") {
                if (x.innerHTML > y.innerHTML) {
                    shouldSwitch = true;
                    break;
                }
            } else if (dir == "desc") {
                if (x.innerHTML < y.innerHTML) {
                    shouldSwitch = true;
                    break;
                }
            }
        }
        if (shouldSwitch) {
            rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
            switching = true;
            switchcount++; // Увеличиваем счетчик переключений
        } else {
            if (switchcount == 0 && dir == "asc") {
                dir = "desc"; // Меняем направление сортировки на убывание
                switching = true;
            }
        }
    }
}
</script>

Эта функция выполняет сортировку по выбранному столбцу. Она проверяет, в каком порядке необходимо отсортировать строки, и меняет их местами при необходимости.

Шаг 3: Полный код

Теперь мы можем объединить все вместе. Вот полный код для нашей сортируемой таблицы:

<html>
<head>
    <title>Сортируемая таблица</title>
</head>
<body>
    <h1>Сортируемая таблица</h1>
    <table id="myTable" border="1">
        <thead>
            <tr>
                <th onclick="sortTable(0)">Имя</th>
                <th onclick="sortTable(1)">Возраст</th>
                <th onclick="sortTable(2)">Город</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Иван</td>
                <td>30</td>
                <td>Москва</td>
            </tr>
            <tr>
                <td>Анна</td>
                <td>25</td>
                <td>Санкт-Петербург</td>
            </tr>
            <tr>
                <td>Петр</td>
                <td>35</td>
                <td>Казань</td>
            </tr>
        </tbody>
    </table>

    <script>
    function sortTable(columnIndex) {
        var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
        table = document.getElementById("myTable");
        switching = true;
        dir = "asc";

        while (switching) {
            switching = false;
            rows = table.rows;

            for (i = 1; i < (rows.length - 1); i++) {
                shouldSwitch = false;
                x = rows[i].getElementsByTagName("TD")[columnIndex];
                y = rows[i + 1].getElementsByTagName("TD")[columnIndex];

                if (dir == "asc") {
                    if (x.innerHTML > y.innerHTML) {
                        shouldSwitch = true;
                        break;
                    }
                } else if (dir == "desc") {
                    if (x.innerHTML < y.innerHTML) {
                        shouldSwitch = true;
                        break;
                    }
                }
            }
            if (shouldSwitch) {
                rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
                switching = true;
                switchcount++;
            } else {
                if (switchcount == 0 && dir == "asc") {
                    dir = "desc";
                    switching = true;
                }
            }
        }
    }
    </script>
</body>
</html>

Теперь у вас есть полная реализация сортируемой таблицы. Вы можете добавить больше данных в таблицу и протестировать сортировку по каждому из столбцов, просто щелкая по заголовкам.

Заключение

Создание сортируемой таблицы с использованием HTML и JavaScript — это полезный навык для веб-разработчиков. Вы можете улучшить функциональность своей таблицы, добавляя фильтры или дополнительные параметры сортировки. Надеюсь, этот урок был для вас полезен!