本文へスキップ
JavaScript 基礎 JavaScript data属性 dataset

data属性を使ってHTMLとJavaScriptを連携しよう

更新日:2026-08-02

data-*属性は、HTML要素へJavaScriptで利用する補助データを持たせる仕組みです。

今回は、複数の記事カードに「お気に入り」ボタンを設け、どの記事が操作されたかをdata-*属性から判断します。

今回使用するファイル構成

javascript-practice/
├── index.html
└── js/
    └── script.js

data属性を連携に利用する

data属性を記述する

<button class="detail-button" type="button" data-article-id="38" data-category="javascript">
  詳細を見る
</button>

属性名はdata-で始め、その後ろへ用途が分かる名前を付けます。

datasetから値を取得する

const button = document.querySelector('.detail-button');

console.log(button.dataset.articleId);
console.log(button.dataset.category);

HTMLのdata-article-idは、JavaScriptではdataset.articleIdになります。取得結果は文字列です。

複数要素で利用する

document.querySelectorAll('.detail-button').forEach((button) => {
  button.addEventListener('click', () => {
    const articleId = Number(button.dataset.articleId);
    console.log(`記事ID:${articleId}`);
  });
});

数値として計算や比較に使う場合はNumber()で変換します。秘密情報や信頼できない値を置かず、サーバー側では受け取ったIDと権限を改めて確認します。

お気に入りボタンを作る

記事ごとのIDをHTMLへ持たせる

<article>
  <h2>JavaScriptの歴史</h2>
  <button class="favorite-button" type="button" data-article-id="38" data-favorite="false">
    お気に入りに追加
  </button>
</article>

<article>
  <h2>JavaScriptを動かす</h2>
  <button class="favorite-button" type="button" data-article-id="39" data-favorite="false">
    お気に入りに追加
  </button>
</article>

<p id="favorite-message" aria-live="polite"></p>

同じクラスのボタンでも、data-article-idによって操作対象を区別できます。属性値はHTML上では常に文字列です。

datasetを更新する

const buttons = document.querySelectorAll('.favorite-button');
const message = document.querySelector('#favorite-message');

buttons.forEach((button) => {
  button.addEventListener('click', () => {
    const articleId = Number(button.dataset.articleId);
    const isFavorite = button.dataset.favorite === 'true';
    const nextFavorite = !isFavorite;

    button.dataset.favorite = String(nextFavorite);
    button.textContent = nextFavorite
      ? 'お気に入りから削除'
      : 'お気に入りに追加';

    message.textContent = nextFavorite
      ? `記事ID ${articleId}をお気に入りに追加しました。`
      : `記事ID ${articleId}をお気に入りから削除しました。`;
  });
});

dataset.favoriteから得られるのは'true'という文字列です。真偽値のtrueとは異なるため、明示的に比較します。属性へ戻すときもString()で文字列にしています。

ハイフンを含む属性名の変換規則

data-article-iddataset.articleIddata-user-roledataset.userRoleになります。data-以降のハイフンを除き、直後の文字を大文字にしたキャメルケースへ変換されます。

button.dataset.articleId;
button.dataset.userRole;

data属性へ置くものを判断する

data属性は、要素の操作に必要なID、表示状態、種類などに向いています。ただしHTMLはDevToolsから誰でも確認・変更できます。

  • パスワードや秘密鍵を入れない
  • data属性の権限名だけでアクセスを許可しない
  • サーバーへ送るIDは改ざんされる前提で再検証する
  • 大量のデータをHTMLへ埋め込まない

data属性は信頼できる保管場所ではなく、HTMLとJavaScriptを結ぶ目印です。

動作を確認する

ボタンを数回押し、表示文、ボタンの文章、DevTools上のdata-favoriteが同時に変化することを確認します。

まとめ

data-*属性とdatasetを使うと、HTML要素と処理対象のデータを対応させられます。次の記事ではイベントの伝播を利用し、親要素で複数の操作を受け取ります。