JavaScriptでチェックボックスを一括操作!HTMLテーブルでの具体例付き解説

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

テーブルのヘッダーにあるチェックボックスをクリックしたら、その他全てのチェックボックスも連動してチェックするようにしたい!

こんなお悩みをお持ちではありませんか?

一括でチェックが入るようにしたい。

・チェックボックスを一括操作できるようにしたい

チェックした箇所のデータを簡単に取得したい

この記事は、JavaScriptを使用して
「チェックボックスを一括操作」する方法を紹介します。


チェックボックスの一括操作を実装することで、大量データを効率的に操作でき、データ管理が楽になります。
さらに、チェックされたデータをまとめて取得し、次の処理に活用することも可能です。

この記事では、チェックボックスを連動して操作する仕組みや、選択されたデータをJavaScriptで一括取得する方法を丁寧に解説します。

初心者の方でも安心して実装できるよう、具体的なコード例とその解説を詳しく掲載していますので、ぜひ最後までお読みください!


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

JavaScriptをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのJavaScript講座がおすすめです。

特に、動画学習の強みは「自分のペースで学べる」ことです。
わからない部分を何度でも繰り返し確認できるため、実際に手を動かしながら理解を深めることができます。これにより、JavaScriptを効率よく学び、実務や趣味のプロジェクトでスキルを活用できるようになります!

もし、「動画を使って効率的に学びたい」と思ったら、ぜひ一度Udemyをチェックしてみてください。

多彩な講座から自分に合った講座を探そう!
UdemyでJavaScriptを検索 画像出典:Udemy

\  動画で効率的に学べる!初心者におすすめのJavaScript講座  /

目次

この記事を読むことで「できるようになる」こと

スポンサーリンク

そもそもチェックボックスを一括操作できると何が便利になる?

まず、この機能がどんな場面で役立つのかを簡単に説明します。

便利になること」3選
  • データ管理が効率化
    例えば、テーブル形式で管理しているデータを一括選択する機能があれば、個別にクリックする手間が省けます。
    選択解除も同様に簡単にできるため、操作性が大幅に向上します。
  • 時間短縮
    チェックボックスの数が多い場合、一括操作は作業時間を大幅に短縮できます。
    特に業務やシステム開発で、100件以上のデータを扱う際には必須の機能です。
  • ユーザーエクスペリエンスの向上
    チェックボックスが連動していることで、操作が直感的になり、ユーザーにとって親切なインターフェースを提供できます。

では、次に具体的な実装方法を見ていきましょう!

JavaScriptでチェックボックスを一括連動する仕組みを解説 | HTML・CSSも解説

今回ご紹介する機能の動作概要は以下の通りです。

動作概要
  1. ヘッダーのチェックボックスをクリック
    • ヘッダーにあるチェックボックスをクリックすると、テーブル内のすべての行のチェックボックスが連動してチェックされます。
  2. 個別のチェックボックスも操作可能
    • 各行のチェックボックスは、ヘッダーと連動しつつ、個別操作も可能です。

See the Pen Untitled by Sean (@Sean-Sean-Sean) on CodePen.

チェックボックスの基本的な仕様についてもっと知りたい方は、MDN Web Docsの <input type=”checkbox”> をご覧ください。

それでは、この機能を実装するための具体的なコードについて、次のセクションで詳しく解説していきます。

解説1. HTMLでチェックボックスを配置する

まず、チェックボックスのHTML構造を作成します。
以下のコードは、テーブルのヘッダーにチェックボックスを配置し、各行にもチェックボックスを設置した例です。

<table>
    <thead>
        <tr>
            <th><input type="checkbox" id="headerCheckbox"></th>
            <th>ヘッダー1</th>
            <th>ヘッダー2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" class="rowCheckbox"></td>
            <td>データ1</td>
            <td>データ2</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="rowCheckbox"></td>
            <td>データ3</td>
            <td>データ4</td>
        </tr>
    </tbody>
</table>
ポイント解説
  • id=”headerCheckbox”
    • ヘッダーのチェックボックスを特定するためのID。
      これを基準にイベントを設定します。
  • class=”rowCheckbox”
    • 各行のチェックボックスをグループ化するためのクラス名です。
      これにより、全ての行をまとめて操作することが可能になります。

解説2. JavaScriptでヘッダーのチェックボックスと各行を連動させる

以下のJavaScriptコードを使うことで、ヘッダーのチェックボックスを操作した際に、各行のチェックボックスが一括で連動するようになります。

実際のコード

// ヘッダーのチェックボックスを取得
const headerCheckbox = document.getElementById('headerCheckbox');

// 全ての行のチェックボックスを操作する関数
function toggleAllRowCheckboxes(checked) {
    const rowCheckboxes = document.querySelectorAll('.rowCheckbox');
    rowCheckboxes.forEach(cb => cb.checked = checked);
}

// ヘッダーのチェックボックスにイベントを追加
headerCheckbox.addEventListener('change', () => {
    toggleAllRowCheckboxes(headerCheckbox.checked);
});
ポイント解説
  • getElementById
    • ヘッダーのチェックボックス(id="headerCheckbox")を取得します。
      この要素を基準にイベントを設定します。
  • querySelectorAll
    • テーブル内のすべての行のチェックボックス(class="rowCheckbox")を取得します。
      このリストを使って一括操作を行います。
  • addEventListener
    • ヘッダーのチェックボックスに「状態が変化したときに処理を実行する」イベントを追加します。
  • checked
    • チェックボックスの「選択状態」を取得または変更するためのプロパティです。
      trueならチェック済み、falseなら未チェックとなります。
「クリック」で、1行ずつコードの解説を見る
  1. const headerCheckbox = document.getElementById(‘headerCheckbox’);
    • このコードは、HTMLの中にある「ヘッダーのチェックボックス」を取得しています。
      具体的には、HTML内でid="headerCheckbox"が付けられている要素を取得しています。
  2. function toggleAllRowCheckboxes(checked) {
    • ここでは、「toggleAllRowCheckboxes」という関数を定義しています。
      この関数には1つの引数(checked)があります。
      引数checkedには、「ヘッダーのチェックボックスがチェックされているかどうか」の状態(trueまたはfalse)が渡されます。
    • この関数を使うことで、テーブル内のすべてのチェックボックスを一括で「チェックする」または「チェックを外す」という操作が簡単に行えます。
  3. const rowCheckboxes = document.querySelectorAll(‘.rowCheckbox’);
    • この行では、HTML内にあるすべての行のチェックボックス(クラス名がrowCheckboxの要素)を取得しています。
    • ヘッダーのチェックボックスがクリックされたときに、どのチェックボックスを操作するかを特定するために必要です。
  4. rowCheckboxes.forEach(cb => cb.checked = checked);
    • ここでは、rowCheckboxesに格納されたすべてのチェックボックスについて、「ヘッダーのチェックボックスの状態(checked)」をコピーする処理を行っています。
      • checkedtrueの場合、すべてのチェックボックスがチェック状態になります。
      • checkedfalseの場合、すべてのチェックボックスのチェックが外れます。
        • forEachは、rowCheckboxesに含まれるチェックボックス1つ1つに対して処理を実行します。
        • cbは、rowCheckboxesの中の各チェックボックスを指します(1つずつ順番に処理されます)。
        • cb.checked = checkedは、「現在のチェックボックス(cb)の状態を、引数checkedの値(trueまたはfalse)に設定する」ことを意味します。
  5. headerCheckbox.addEventListener(‘change’, () => {
    • この行では、「ヘッダーのチェックボックスが操作されたときに実行する処理」を設定しています。
      具体的には、ヘッダーのチェックボックスの状態が変わった(changeイベントが発生した)ときに、後に書かれた処理を実行します。
    • たとえば、ヘッダーのチェックボックスをクリックして「チェックを入れる」または「チェックを外す」操作をしたときに、このイベントリスナーが動作します。
  6. toggleAllRowCheckboxes(headerCheckbox.checked);
    • ここでは、先ほど定義したtoggleAllRowCheckboxes関数を実行しています。
      引数としてheaderCheckbox.checkedを渡しています。
    • headerCheckbox.checkedは、ヘッダーのチェックボックスがチェックされている場合にtrue、されていない場合にfalseとなります。
  7. });
    • イベントリスナーの処理を終了しています。
      この括弧によって、1つのまとまった処理として完結しています。

解説補足. CSSでテーブルの装飾を行う

ここでは最低限のCSSを追加し、チェックボックスのスタイルやテーブルの見た目を簡単に整えるコードを設定しています。

table {
    border-collapse: collapse;
    /* テーブルセルの枠線を結合して1本にする */
}

th {
    background-color: #f8f7f6;
    /* テーブルヘッダーの背景色を薄いグレーに設定 */
}

th, td {
    border-bottom: solid 1px black;
    /* セルの下線を黒色で実線に設定 */
    padding: 15px;
    /* セル内の文字や内容に余白を設定(上下左右15pxずつ) */
}

input[type="checkbox"] {
    transform: scale(1.5);
    /* チェックボックスのサイズを1.5倍に拡大 */
    vertical-align: middle;
    /* チェックボックスを縦方向で中央揃えにする */
}
ポイント解説
  • table
    • テーブル全体のデザインを整えるために使用します。
      • セル同士の境界線を結合(border-collapse)することで、セルの間に隙間を作らずスッキリとした見た目にできます。
  • th, td
    • テーブルのヘッダーとデータセルの見た目を統一します。
      • paddingを設定することで、文字や内容にスペースを確保し、見た目を整えます。
  • input[type=”checkbox”]
    • チェックボックスのスタイルを調整します。
      • transform: scale(1.5) を使用してサイズを拡大し、見やすく操作しやすい形にします。
      • vertical-align: middle を指定することで、チェックボックスをセルやテキストの中央に揃えます。
スポンサーリンク

このコードを使用する際の注意ポイント

  • IDとクラスの設定ミスに注意!
    IDは1つしか存在できませんが、クラスは複数の要素に適用されます。
    ヘッダーにはID、各行にはクラスを使うことで適切に区別します。
  • JavaScriptが動作することを確認
    JavaScriptファイル(app.jsなど)を正しくHTMLに読み込ませる必要があります。
    以下のように記載しましょう。
    <script src="app.js"></script>
  • ブラウザ互換性
    ほとんどのモダンブラウザで動作しますが、古いブラウザでは動作しない場合があります。
    その際はpolyfill(互換性を補うコード)の導入を検討してください。
スポンサーリンク

使用例 : チェックボックスで選択された行のデータを取得

一括でチェックボックスを操作するコードを使用すると、次のような動作を効率よく活用することも可能です。

このコードでは、チェックボックスが選択された行のデータを取得し、ボタンを押すことで、それをアラートで表示します。
複数のデータから特定の行を選択し、その情報を次の処理に活用する場面で大変便利です。

See the Pen Untitled by Sean (@Sean-Sean-Sean) on CodePen.

JavaScriptをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのJavaScript講座がおすすめです。

特に、動画学習の強みは「自分のペースで学べる」ことです。
わからない部分を何度でも繰り返し確認できるため、実際に手を動かしながら理解を深めることができます。これにより、JavaScriptを効率よく学び、実務や趣味のプロジェクトでスキルを活用できるようになります!

もし、「動画を使って効率的に学びたい」と思ったら、ぜひ一度Udemyをチェックしてみてください。

多彩な講座から自分に合った講座を探そう!
UdemyでJavaScriptを検索 画像出典:Udemy

\  動画で効率的に学べる!初心者におすすめのJavaScript講座  /

コード例 | チェックボックス選択行のデータ取得

コード例 | HTML

クリックしてHTMLのコードを見る
<table>
  <thead>
    <tr>
      <th><input type="checkbox" id="headerCheckbox"></th>
      <th>ヘッダー1</th>
      <th>ヘッダー2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><input type="checkbox" class="rowCheckbox"></td>
      <td>データ1-1</td>
      <td>データ2-1</td>
    </tr>
    <tr>
      <td><input type="checkbox" class="rowCheckbox"></td>
      <td>データ1-2</td>
      <td>データ2-2</td>
    </tr>
    <tr>
      <td><input type="checkbox" class="rowCheckbox"></td>
      <td>データ1-3</td>
      <td>データ2-3</td>
    </tr>
  </tbody>
</table>
<button id="getDataButton">選択データを取得</button>

コード例 | JavaScript

クリックしてJavaScriptのコードを見る
// ヘッダーのチェックボックスを取得
const headerCheckbox = document.getElementById('headerCheckbox');

// 行のチェックボックスを取得
const rowCheckboxes = document.querySelectorAll('.rowCheckbox');

// ヘッダーのチェックボックスが変更されたときのイベントリスナー
headerCheckbox.addEventListener('change', () => {
    // ヘッダーのチェックボックスの状態を取得
    const isChecked = headerCheckbox.checked;

    // すべての行のチェックボックスをヘッダーの状態に合わせる
    rowCheckboxes.forEach(checkbox => {
        checkbox.checked = isChecked;
    });
});

// ボタンにクリックイベントを追加
document.getElementById('getDataButton').addEventListener('click', () => {
    // テーブル内のすべての行を取得
    const selectedRows = document.querySelectorAll('tr');
    let selectedData = []; // 選択された行のデータを格納する配列

    // 各行をループ処理
    selectedRows.forEach(row => {
        // 行内のチェックボックスを取得
        const checkbox = row.querySelector('.rowCheckbox');
        if (checkbox && checkbox.checked) {
            // チェックされた行のデータを取得し、配列に追加
            const rowData = Array.from(row.querySelectorAll('td'))
                                    .map(td => td.textContent.trim()) // 各セルの内容を取得
                                    .filter(text => text !== "");    // 空要素を除去
            selectedData.push(rowData.join(', '));
        }
    });

    // 選択されたデータをアラートで表示
    if (selectedData.length > 0) {
        alert("選択されたデータ:\n" + selectedData.join('\n')); // 各行データを改行区切りで表示
    } else {
        alert("選択されたデータはありません。");
    }
});

コード例 | CSS

クリックしてCSSのコードを見る
table {
    border-collapse: collapse; /* テーブルセルの枠線を結合して1本にする */
    margin: 20px 0; /* 上下にスペースを追加 */
}

th {
    background-color: #f8f7f6; /* ヘッダーの背景色を薄いグレーに設定 */
}

th, td {
    border-bottom: solid 1px black; /* セルの下線を黒色で実線に設定 */
    padding: 15px; /* セル内の文字や内容に余白を設定(上下左右15pxずつ) */
    text-align: center; /* セル内の文字を中央揃えに設定 */
}

input[type="checkbox"] {
    transform: scale(1.5); /* チェックボックスを1.5倍に拡大 */
    vertical-align: middle; /* 縦方向で中央揃えにする */
}

button {
    margin-top: 20px; /* ボタンとテーブルの間に余白を設定 */
    padding: 10px 20px; /* ボタン内の余白を設定 */
    font-size: 16px; /* ボタンの文字サイズを大きくする */
    background-color: #007bff; /* ボタンの背景色を青に設定 */
    color: white; /* ボタンの文字色を白に設定 */
    border: none; /* ボタンの枠線を非表示にする */
    border-radius: 5px; /* ボタンの角を丸くする */
    cursor: pointer; /* ボタンのカーソルをポインターに変更 */
}

button:hover {
    background-color: #0056b3; /* ボタンをホバーした際に濃い青にする */
}

コードの動作概要

STEP
ヘッダーのチェックボックスで全行を連動

ヘッダーのチェックボックスを操作すると、すべての行のチェックボックスが連動してオン/オフされます。

STEP
ボタンで選択行のデータを取得

ボタンをクリックすると、チェックされた行のデータを取得し、アラートで表示します。

このコードで使用している機能

機能名説明
querySelectorAll指定したセレクタに一致するすべての要素を取得します。
addEventListenerヘッダーやボタンのクリック時にイベント処理を追加します。
Array.from行内のセルデータを配列として取得し、操作できるようにします。
mapセルデータをループ処理し、テキストデータを整形します。
filter空白のセルデータを除外するために使用します。
alert選択されたデータをアラートで表示します。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. const headerCheckbox = document.getElementById(‘headerCheckbox’);
    • HTML内でid="headerCheckbox"を持つ要素を取得します。
      これはテーブルのヘッダーにあるチェックボックスです。
  2. const rowCheckboxes = document.querySelectorAll(‘.rowCheckbox’);
    • class="rowCheckbox"を持つすべてのチェックボックス要素を取得します。
    • querySelectorAllを使うことで複数の要素をまとめて取得できます。
      これはテーブル内の各行にあるチェックボックスを指します。
  3. headerCheckbox.addEventListener(‘change’, () => {
    • ヘッダーのチェックボックスに「変更イベント(change)」を設定します。
    • このイベントは、チェックボックスの状態がオン(チェックされる)またはオフ(チェックが外れる)に切り替わったときに実行されます。
  4. const isChecked = headerCheckbox.checked;
    • ヘッダーのチェックボックスが現在チェックされているか(true)どうかを取得します。
      チェックされていればtrue、チェックが外されていればfalseが返されます。
  5. rowCheckboxes.forEach(checkbox => {
    checkbox.checked = isChecked;
    });
    • forEachを使って、rowCheckboxesに含まれる各チェックボックスを1つずつ操作します。
    • 各行のチェックボックスの状態(checkedプロパティ)を、ヘッダーのチェックボックスの状態(isChecked)に設定します。
      これにより、ヘッダーのチェックボックスに連動して、すべての行が一括でオン/オフされます。
  6. document.getElementById(‘getDataButton’).addEventListener(‘click’, () => {
    • HTML内でid="getDataButton"を持つボタン要素を取得し、クリックイベントを設定します。
      このイベントは、ボタンがクリックされたときに実行されます。
  7. const selectedRows = document.querySelectorAll(‘tr’);
    • テーブル内にあるすべての行(tr要素)を取得します。
      このリストに対して後でループ処理を行い、選択された行のデータを取得します。
  8. let selectedData = [];
    • 選択された行のデータを保存するための空の配列を作成します。
      この配列に選択されたデータを順次追加していきます。
  9. selectedRows.forEach(row => {
    • テーブル内のすべての行に対してループ処理を実行します。
    • rowは、現在処理している行を指します。
  10. const checkbox = row.querySelector(‘.rowCheckbox’);
    • 現在の行(row)内にあるチェックボックスを取得します。
    • querySelectorを使用して、class="rowCheckbox"を持つチェックボックスを探します。
  11. if (checkbox && checkbox.checked) {
    • チェックボックスが存在し、かつチェックされている場合にのみ以下の処理を実行します。
    • 条件式がtrueの場合、選択されたデータを取得します。
  12. const rowData = Array.from(row.querySelectorAll(‘td’))
    • 現在の行(row)内にあるすべてのセル(td要素)を取得します。
    • Array.fromを使うことで、NodeListを配列に変換しています。
  13. .map(td => td.textContent.trim())
    • 各セル(td)のテキスト内容(textContent)を取得し、余分な空白を削除します。
    • trim()は、文字列の前後にある不要な空白を取り除くために使用します。
  14. .filter(text => text !== “”);
    • 空のデータ(空文字列)を除外します。
      この処理により、不要な空白セルが結果に含まれなくなります。
  15. selectedData.push(rowData.join(‘, ‘));
    • 整形したデータをカンマ(,)区切りで結合し、selectedData配列に追加します。
      これにより、1行ごとのデータが1つの文字列として保存されます。
  16. if (selectedData.length > 0) {
    • selectedData配列にデータが1件以上存在するかを確認します。
      配列の長さ(length)が0より大きい場合、以下の処理を実行します。
  17. alert(“選択されたデータ:\n” + selectedData.join(‘\n’));
    • 選択されたデータを改行(\n)区切りでアラート表示します。
  18. } else {
    alert(“選択されたデータはありません。”);
    }
    • selectedData配列が空の場合、アラートで「選択されたデータはありません。」と表示します。

総括・ポイント

このコードは、チェックボックスを使ってテーブル内の特定の行を選択し、そのデータを取得する実用的な例です。

ポイントまとめ
  • 選択されたデータの取得
    • チェックされた行のデータを収集し、次の処理に利用できるようにします。
  • コードの柔軟性
    • テーブルのデータが増減しても、動的に対応可能です。
  • 初心者にもわかりやすい設計
    • JavaScriptの基本的な操作(querySelectorAllforEachなど)を活用し、簡潔に構成されています。
スポンサーリンク

この記事のまとめ

この記事では、JavaScriptでチェックボックスを一括操作する方法を初心者向けに解説しました。

チェックボックスをヘッダーから一括操作する機能を実装することで、大量データを効率よく管理したり、選択された行のデータを簡単に取得して次の処理に活用することが可能になります。

さらに、HTML・CSS・JavaScriptを組み合わせて、動作するテーブルを構築する手順も紹介しました。

ポイントのおさらい

今回の学びを活用するために

この記事で紹介した方法は、チェックボックスを使ったデータ管理や、選択データの取得を効率化する上で非常に実用的です。

特に以下のような場面で役立ちます。

  • 業務アプリケーションや管理ツール
    • 大量のデータを一括操作し、選択した項目だけを処理するシステムの構築が可能です。
  • ユーザビリティの向上
    • 一括操作と個別操作の両立により、直感的で使いやすいUIを実現できます。
  • 学習やスキルアップ
    • JavaScriptやHTML、CSSの基本的な操作を実際のコード例で学ぶことができ、Web開発スキルの向上につながります。
あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次