このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
HTMLElement: dataset プロパティ
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
dataset はHTMLElement インターフェイスの読み取り専用プロパティで、要素に設定されたすべてのカスタムデータ属性 (data-*) への読み取り/書き込みアクセスを提供します。これは文字列のマップである (DOMStringMap) で、それぞれのdata-* 属性の項目です。
メモ:dataset プロパティ自体は読み取ることができますが、直接書き込むことはできません。すべての書き込みは、個々の data 属性を表すdataset 内の個々のプロパティを表します。
また、 HTML のdata-* 属性とそれに対応する DOM のdataset.プロパティ は同じ名前にはなりませんが、次のように常に近いものになります。
- HTML では
属性の名前は、
data-で始まります。文字、数字、ダッシュ (-)、ドット (.)、コロン (:)、アンダースコア (_) のみを入れることができます。ASCII 大文字のAからZは小文字に変換されます。- JavaScript では
カスタムデータ属性のプロパティ名は、同じ HTML 属性の名前から
data-の接頭辞を除いたものですが、そのプロパティのキャメルケースの名前であり、単一のダッシュ (-) を除いたものです。
以下の情報に加えて、データ属性の使用の記事に、HTML データ属性の使用方法に関するガイドがあります。
In this article
名前の変換
- ダッシュスタイルからキャメルケースへの変換
カスタムデータ属性名は、次のルールに従って
DOMStringMap項目のキーに変換されます。- すべての ASCII の大文字 (
AからZまで) を小文字にします。 - 接頭辞の
data-を(ダッシュを含め)削除します。 - ダッシュ (
U+002D) に ASCII 小文字のaからzが続く場合、ダッシュを削除し、その文字を対応する大文字に変換します。 - 他の文字 (他のダッシュを含む) は変更しません。
- すべての ASCII の大文字 (
- キャメルケースからダッシュスタイルへの変換
キーを属性名にマッピングする逆の変換では、以下のように次のルールが使用されます。
- 制約事項: 変換前に置いて、ダッシュの直後に ASCII 小文字
aからzを続けてはなりません。 - 接頭辞として
data-が追加されます。 - ASCII 大文字の
AからZは、ダッシュと、その後に対応する小文字が続くものに変換されます。 - 他の文字は変更しません。
- 制約事項: 変換前に置いて、ダッシュの直後に ASCII 小文字
例えば、data-abc-def という名前の属性は、キーabcDef に対応します。
値へのアクセス
- 属性は dataset のオブジェクトプロパティのようにキャメルケース名(キー)を使用して、
element.dataset.keynameのように設定したり読み取ったりすることができます。 - 属性はブラケット構文を使用して、
element.dataset['keyname']のように設定したり読み取ったりすることもできます。 in演算子を'keyname' in element.datasetのように使用すると、特定の属性が存在するかどうかを確認できます。これはdatasetのプロトタイプチェーンを走査することになり、プロトタイプチェーンを汚染する可能性のある外部コードを持っている場合には安全ではないことに注意してください。例えばObject.hasOwn(element.dataset, 'keyname')や、単にelement.dataset.keyname !== undefinedかどうかを調べる方法などがあります。
値の設定
属性が設定されると、その値は常に文字列に変換されます。例えば、
element.dataset.example = nullはdata-example="null"に変換されます。属性を削除する場合は、
delete演算子が使用できます。
値
DOMStringMap です。
例
<div data-id="1234567890" data-user="carinaanand" data-date-of-birth> Carina Anand</div>const el = document.querySelector("#user");// el.id === 'user'// el.dataset.id === '1234567890'// el.dataset.user === 'carinaanand'// el.dataset.dateOfBirth === ''// データ属性の設定el.dataset.dateOfBirth = "1960-10-03";// JS での結果: el.dataset.dateOfBirth === '1960-10-03'// HTML での結果: <div data-id="1234567890" data-user="carinaanand" data-date-of-birth="1960-10-03">Carina Anand</div>delete el.dataset.dateOfBirth;// JS での結果: el.dataset.dateOfBirth === undefined// HTML での結果: <div data-id="1234567890" data-user="carinaanand">Carina Anand</div>if (el.dataset.someDataAttr === undefined) { el.dataset.someDataAttr = "mydata"; // JS での結果: 'someDataAttr' in el.dataset === true // HTML での結果: <div data-id="1234567890" data-user="carinaanand" data-some-data-attr="mydata">Carina Anand</div>}仕様書
| Specification |
|---|
| HTML> # dom-dataset-dev> |
ブラウザーの互換性
関連情報
- HTML の
data-*クラスのグローバル属性 - データ属性の使用
Element.getAttribute()およびElement.setAttribute()