HTMLテーブルにソート機能を実装し並べ替え可能に!JavaScriptで実装!

ウェブ開発において、データを整理し表示するためのテーブルは非常に重要です。しかし、大量のデータが含まれている場合、ユーザーがデータを簡単に整理したり検索したりすることが難しくなることがあります。今回のブログ記事では、JavaScriptを使用してHTMLテーブルをソートする方法について詳しく説明します。この方法を使用すると、テーブル内のデータをクリックやタップでソートすることができ、ユーザーがデータを簡単に見つけることができます。

実際の表示

PR

種類 年齢 名前
ライオン 30 エンジニア
トラ 34 デザイナー
ゾウ 28 マーケター
カバ 32 医師
ヒョウ 29 教授
チーター 27 プログラマー
キリン 31 アーティスト
ゴリラ 35 建築家
ペンギン 26 料理人
カンガルー 33 作家
ワニ 30 舞台演出家
ハリネズミ 28 歌手
カメレオン 29 映画監督
オウム 36 宇宙飛行士
ゴルフィンチ 25 料理研究家
ハマスター 30 ファッションデザイナー
クジャク 28 舞踏家
アルパカ 32 農家
フラミンゴ 31 テレビプロデューサー
カラス 29 声優
オランウータン 34 政治家
クマ 27 消防士
ヤギ 30 ソフトウェアエンジニア
アヒル 33 映画スタントマン
パンサー 26 ミュージシャン
コアラ 30 料理評論家
ホッキョクギツネ 28 冒険家
アシカ 35 獣医
オオカミ 29 テクニカルライター
キツネ 32 映画プロデューサー

ソースコード例

HTMLソースコード例

<table id="data-table">
	<thead>
		<tr>
			<th onclick="sortTable(0)">
				種類
				<span class="sort-arrow"></span>
			</th>
			<th onclick="sortTable(1)">
				年齢
				<span class="sort-arrow"></span>
			</th>
			<th onclick="sortTable(2)">
				名前
				<span class="sort-arrow"></span>
			</th>
		</tr>
	</thead>
	<tr>
		<td>ライオン</td>
		<td>30</td>
		<td>エンジニア</td>
	</tr>
	<tr>
		<td>トラ</td>
		<td>34</td>
		<td>デザイナー</td>
	</tr>
	<tr>
		<td>ゾウ</td>
		<td>28</td>
		<td>マーケター</td>
	</tr>
	<tr>
		<td>カバ</td>
		<td>32</td>
		<td>医師</td>
	</tr>
	<tr>
		<td>ヒョウ</td>
		<td>29</td>
		<td>教授</td>
	</tr>
	<tr>
		<td>チーター</td>
		<td>27</td>
		<td>プログラマー</td>
	</tr>
	<tr>
		<td>キリン</td>
		<td>31</td>
		<td>アーティスト</td>
	</tr>
	<tr>
		<td>ゴリラ</td>
		<td>35</td>
		<td>建築家</td>
	</tr>
	<tr>
		<td>ペンギン</td>
		<td>26</td>
		<td>料理人</td>
	</tr>
	<tr>
		<td>カンガルー</td>
		<td>33</td>
		<td>作家</td>
	</tr>
	<tr>
		<td>ワニ</td>
		<td>30</td>
		<td>舞台演出家</td>
	</tr>
	<tr>
		<td>ハリネズミ</td>
		<td>28</td>
		<td>歌手</td>
	</tr>
	<tr>
		<td>カメレオン</td>
		<td>29</td>
		<td>映画監督</td>
	</tr>
	<tr>
		<td>オウム</td>
		<td>36</td>
		<td>宇宙飛行士</td>
	</tr>
	<tr>
		<td>ゴルフィンチ</td>
		<td>25</td>
		<td>料理研究家</td>
	</tr>
	<tr>
		<td>ハマスター</td>
		<td>30</td>
		<td>ファッションデザイナー</td>
	</tr>
	<tr>
		<td>クジャク</td>
		<td>28</td>
		<td>舞踏家</td>
	</tr>
	<tr>
		<td>アルパカ</td>
		<td>32</td>
		<td>農家</td>
	</tr>
	<tr>
		<td>フラミンゴ</td>
		<td>31</td>
		<td>テレビプロデューサー</td>
	</tr>
	<tr>
		<td>カラス</td>
		<td>29</td>
		<td>声優</td>
	</tr>
	<tr>
		<td>オランウータン</td>
		<td>34</td>
		<td>政治家</td>
	</tr>
	<tr>
		<td>クマ</td>
		<td>27</td>
		<td>消防士</td>
	</tr>
	<tr>
		<td>ヤギ</td>
		<td>30</td>
		<td>ソフトウェアエンジニア</td>
	</tr>
	<tr>
		<td>アヒル</td>
		<td>33</td>
		<td>映画スタントマン</td>
	</tr>
	<tr>
		<td>パンサー</td>
		<td>26</td>
		<td>ミュージシャン</td>
	</tr>
	<tr>
		<td>コアラ</td>
		<td>30</td>
		<td>料理評論家</td>
	</tr>
	<tr>
		<td>ホッキョクギツネ</td>
		<td>28</td>
		<td>冒険家</td>
	</tr>
	<tr>
		<td>アシカ</td>
		<td>35</td>
		<td>獣医</td>
	</tr>
	<tr>
		<td>オオカミ</td>
		<td>29</td>
		<td>テクニカルライター</td>
	</tr>
	<tr>
		<td>キツネ</td>
		<td>32</td>
		<td>映画プロデューサー</td>
	</tr>
</table>

CSSソースコード例

table {
    width: 100%;
    border-collapse: collapse;
}
#data-table th, #data-table td {
    border: 1px solid #ddd;
    padding: 12px 15px;
    text-align: left;
}

#data-table th {
    position: relative;
    background-color: #007bff;
    color: white;
    cursor: pointer;
    user-select: none;
}

#data-table th:hover {
    background-color: #0056b3;
}

#data-table tr:nth-child(even) {
    background-color: #f2f2f2;
}

.sort-arrow {
    display: flex;
    flex-direction: column;
    gap: 1px;
    width: 0;
    position: absolute;
    top: 50%;
    right: 20px;
    transform: translateY(-50%);
}
.sort-arrow::before,
.sort-arrow::after {
    content: "";
    display: inline-block;    
}
.sort-arrow::before {
    border-bottom: 5px solid currentColor;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    transform: translate(-50%,-65%);
}
.sort-arrow::after {
    border-top: 5px solid currentColor;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    transform: translate(-50%,-35%);
}
.asc .sort-arrow::after,
.desc .sort-arrow::before {
    content: none;
}
@media screen and (max-width: 767px) {
    .sort-arrow {
        right: 10px;
    }
}

JavaScriptソースコード例

let sortOrder = 1;

function sortTable(columnIndex) {
    const table = document.getElementById("data-table");
    let switching = true;
    let currentDirection = (sortOrder === 1) ? "asc" : "desc";
    let i;

    let ths = table.getElementsByTagName("TH");
    for (i = 0; i < ths.length; i++) {
        ths[i].classList.remove("asc", "desc");
        if (i === columnIndex) {
            ths[i].classList.add(currentDirection);
        }
    }

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

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

            if ((sortOrder === 1 && x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) ||
                (sortOrder === -1 && x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase())) {
                shouldSwitch = true;
                break;
            }
        }

        if (shouldSwitch) {
            rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
            switching = true;
        }
    }

    sortOrder = -sortOrder;
}

まとめ

このブログ記事では、JavaScriptを使用してHTMLテーブルをソートする方法について説明しました。提供されたソースコード例を使用することで、ウェブページ上でテーブル内のデータを簡単に整理できるようになります。テーブルのヘッダーセルをクリックすることで、昇順または降順でデータをソートでき、ユーザーエクスペリエンスを向上させることができます。この手法を活用して、データを効果的に表示し、ウェブアプリケーションやウェブサイトの使いやすさを向上させましょう。

>お問い合わせはこちら

お問い合わせはこちら