HTMLElement: dataset プロパティ
dataset は HTMLElement インターフェイスの読み取り専用プロパティで、要素に設定されたすべてのカスタムデータ属性 (data-*) への読み取り/書き込みアクセスを提供します。これは文字列のマップである (DOMStringMap) で、それぞれの data-* 属性の項目です。
メモ: dataset プロパティ自体は読み取ることができますが、直接書き込むことはできません。
代わりに、すべての書き込みは dataset 内の個々のプロパティに対して行う必要があり、それは data 属性を表します。
また、 HTML の data-* 属性とそれに対応する DOM dataset.プロパティ は同じ名前にはなりませんが、次のように常に近いものになります。
- HTML では
-
属性の名前は、
data-で始まります。文字、数字、ダッシュ (-)、ドット (.)、コロン (:)、アンダースコア (_) のみを入れることができます。 ASCII 大文字のAからZは小文字に変換されます。 - JavaScript では
-
カスタムデータ属性のプロパティ名は、同じ HTML 属性の名前から
data-の接頭辞を除いたものですが、そのプロパティのキャメルケース (camelCase) の名前であり、単一のダッシュ (-) を除いたものです。
以下の情報に加えて、データ属性の使用の記事に、HTML データ属性の使用方法に関するガイドがあります。
名前の変換
- ダッシュスタイルからキャメルケースへの変換
-
カスタムデータ属性名は、次のルールに従って
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演算子を使用して、特定の属性が存在するかどうかを確認できます。
値の設定
-
属性が設定されると、その値は常に文字列に変換されます。
例えば、
element.dataset.example = nullはdata-example="null"に変換されます。 - 属性を削除する場合は、
delete演算子が使用できます。
値
DOMStringMap です。
例
html
<div id="user" data-id="1234567890" data-user="carinaanand" data-date-of-birth>
Carina Anand
</div>
js
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 id="user" 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 id="user" data-id="1234567890" data-user="carinaanand">Carina Anand</div>
if (!("someDataAttr" in el.dataset)) {
el.dataset.someDataAttr = "mydata";
// JS での結果: 'someDataAttr' in el.dataset === true
// HTML での結果: <div id="user" data-id="1234567890" data-user="carinaanand" data-some-data-attr="mydata">Carina Anand</div>
}
仕様書
| Specification |
|---|
| HTML Standard # dom-dataset-dev |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- HTML の
data-*クラスのグローバル属性 - データ属性の使用
Element.getAttribute()およびElement.setAttribute()