0Pricing
HTML Academy · レッスン

JavaScriptのdatasetでdata-*にアクセスする

dataset APIでカスタムdata属性を読み書きします

「JavaScriptのdatasetでdata-*にアクセスする」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

dataset APIとは何ですか

すべてのHTML要素は、datasetプロパティを介して自身のdata-*属性を公開します。これは、getAttribute()を呼び出さなくても属性名と値を対応付けられるDOMStringMapです。

属性からプロパティへのマッピング

data-user-idはel.dataset.userIdになります。属性名のハイフンは、datasetプロパティではcamelCaseに変換されます。data-item-countにはel.dataset.itemCountでアクセスします。

値の読み取り

データ属性を読み取ります: const id = el.dataset.userId。datasetの値はすべて文字列です — 必要に応じてNumber()またはparseInt()で数値に変換します。存在しない属性はnullではなくundefinedを返します。

const card = document.querySelector(".card");
const userId = card.dataset.userId;
const count = Number(card.dataset.itemCount);

値の書き込み

datasetを介してデータ属性を設定します: el.dataset.state = "active"。これにより、data-state HTML属性が作成または更新されます。属性の変更はすぐにDOMへ反映され、MutationObserverで監視できます。

値の削除

データ属性を削除します: delete el.dataset.userId。対応するdata-user-id属性が要素から削除されます。明示的に削除する場合は、el.removeAttribute("data-user-id")も使用できます。

datasetの反復処理

datasetはDOMStringMapです。for...inループで反復するか、Object.entriesにスプレッドして使用します: Object.entries(el.dataset).forEach(([key, value]) => { ... })。これは、要素のすべてのデータ属性をまとめて読み取る場合に便利です。

コンポーネントの状態にdatasetを使用する

非表示のinput要素やJavaScript変数の代わりに、軽量なコンポーネントの状態をデータ属性に保存します。タブコンポーネントでは、コンテナのdata-active-tabにアクティブなタブのインデックスを保存できます。共有変数がなくても、どのスクリプトからでも読み取れます。

datasetを使ったイベント委譲

項目のリストでは、コンテナに1つだけクリックリスナーを設定します。クリック時に、クリックされた対象のdatasetを読み取ります: e.target.closest("[data-id]").dataset.id。項目ごとのバインドによるオーバーヘッドなしで、1つのリスナーですべての項目を処理できます。

datasetとカスタムプロパティの比較

HTMLから読み取る必要があるデータ(サーバーでレンダリングされたメタデータや、CSSセレクターからアクセスするデータ)にはdatasetを使用します。HTMLから見える必要がない一時的な実行時の状態には、JavaScript変数を使用します。両方を混在させると、不要な複雑さが加わります。

型の強制変換に関する注意

datasetは常に文字列を返します。el.dataset.active === trueは常にfalseになります。el.dataset.active === "true"と比較するか、変換してください: el.dataset.active === "true"。datasetに保存したブール値の状態は、文字列として比較する必要があります。

datasetとgetAttributeの比較

どちらもデータ属性を読み取ります。datasetはcamelCaseでアクセスできるため便利です。一方、getAttributeでは「data-」プレフィックスを含む完全な属性名が必要です。現代的なコードではdatasetを優先し、データ属性と一緒にデータ属性以外の属性を反復処理する場合はgetAttributeを使用します。

確認問題

data-user-id HTML属性は、JavaScriptのdatasetオブジェクトではどのように表されますか?

まとめ

dataset APIは、data-*属性をcamelCaseのJavaScriptプロパティに対応付け、簡単な読み取り、書き込み、削除を可能にします。これにより、非表示のinput要素やグローバル変数を使わずに、コンポーネントの状態の保存、イベント委譲のパターン、サーバーからクライアントへのデータ受け渡しを実現できます。

よくある質問

「JavaScriptのdatasetでdata-*にアクセスする」レッスンは無料ですか?

はい。「JavaScriptのdatasetでdata-*にアクセスする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「JavaScriptのdatasetでdata-*にアクセスする」で何を学びますか?

dataset APIでカスタムdata属性を読み書きします ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「JavaScriptのdatasetでdata-*にアクセスする」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. data-*の構文と命名規則
  2. JavaScriptのdatasetでdata-*にアクセスする
  3. CSS属性セレクターでdata-*を使う
  4. 実践パターン:ツールチップと状態管理
← HTML Academyに戻る