Table筛选功能

52 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
        th,
        td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }

        th {
            cursor: pointer;
        }
    </style>

</head>

<body>
    <table>
        <thead>
            <tr>
                <th>序号</th>
                <th>分类</th>
                <th>作者</th>
                <th>书名</th>
                <th>评级</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>科幻</td>
                <td>作者1</td>
                <td>书名1</td>
                <td>4星</td>
            </tr>
            <tr>
                <td>2</td>
                <td>历史</td>
                <td>作者2</td>
                <td>书名2</td>
                <td>3星</td>
            </tr>

            <tr>
                <td>3</td>
                <td>悬疑</td>
                <td>作者3</td>
                <td>书名3</td>
                <td>5星</td>
            </tr>
            <tr>
                <td>4</td>
                <td>文学</td>
                <td>作者4</td>
                <td>书名4</td>
                <td>4星</td>
            </tr>
            <tr>
                <td>5</td>
                <td>科幻</td>
                <td>作者4</td>
                <td>书名4</td>
                <td>4星</td>
            </tr>

            <!-- Add more rows as needed -->
        </tbody>
    </table>
</body>

</html>

<script>
    document.addEventListener("DOMContentLoaded", function () {
        const table = document.querySelector('table');
        const thElements = document.querySelectorAll('th');

        thElements.forEach(th => {
            th.addEventListener('click', function () {
                sortTable(this.cellIndex);
            });
        });

        function sortTable(columnIndex) {
            const tbody = table.querySelector('tbody');
            const rows = Array.from(tbody.rows);
            rows.sort((a, b) => {
                const aText = a.cells[columnIndex].textContent.trim();
                const bText = b.cells[columnIndex].textContent.trim();
                return aText.localeCompare(bText);
            });
            const fragment = document.createDocumentFragment();
            rows.forEach(row => fragment.appendChild(row));
            tbody.innerHTML = '';
            tbody.appendChild(fragment);
            setTimeout(() => {
                requestAnimationFrame(() => {
rows.forEach(row => Array.from(row.cells).forEach(cell => cell.style.transform = ''));
                });
            }, 10);
        }
    });
</script>