data属性 = カスタムデータ属性
これをJavaScriptで取得・追加したい場合です。
それには専用の方法が用意されてます。
知らないと遠回りなことをしがちなので、
JSでデータ属性を取得・追加の方法をまとめます。
このページの目次 [隠す]
data属性とはそもそも何か。その定義
これはカスタムデータ属性とも呼ばれます。
▼ このような特徴を持つ
- 属性名が data- から始まる
- HTML ⇔ JS 間のデータ受け渡しに使う
- 他属性と衝突しないカスタムデータ
▼ data属性を持つ要素のHTML例
このように data-id とか data-category みたいに data- から始まる属性です。data属性名は大文字ふくめずハイフンで区切るように定義します。
用途としては表面的には表示したくないもの(IDだったり、作成日時だったり)を保持したり、JavaScriptにカスタムデータを渡すのに使います。
data属性自体はとてもシンプル。
data属性はdatasetから簡単に扱える
このdata属性をどうやって扱うかですが…
実は専用のdatasetプロパティが用意されてます。
▼ HTMLElement.dataset の概要
dataset は HTMLElement インターフェイスの読み取り専用プロパティで、要素に設定されたすべてのカスタムデータ属性 (data-*) への読み取り/書き込みアクセスを提供します。これは文字列のマップである (DOMStringMap) で、それぞれの data-* 属性の項目です。
引用元 : https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/dataset
こんな便利なのがあると知らなかった…
知らないから遠回りな方法を使ってました。
同じような経験した人は少なくないはずです。
要素のdata属性を取得する方法とコード例
それではdatasetによるdata属性の取得について。
これは本当に簡単にできます。
▼ 例えばこんな要素があるとする
▼ datasetからdata属性取得のJSコード例
▼ 上記コードのコンソール出力結果
上記コードの $item.dataset.categoryId みたいにカスタム属性の名前でアクセスできます。ただしHTML上ではハイフン区切りの data-category-name ですが、JavaScript上では dataset.categoryName のようにキャメルケース記法になります。
- HTML上ではdata属性はハイフン区切り
- JS上ではそれにキャメルケースでアクセス
この点に注意が必要になります。
要素にdata属性を追加・書き換えのコード例
お次はdata属性を追加・書き換えする場合です。
そういった場合、次のようなコードになります。
▼要素に data-deleted-at 属性を追加するコード例
▼ 要素の data-created-at 属性を書き換えするコード例
そのまんまdata属性に代入するだけです。
ただしJavaScript上ではハイフン区切りのケバブケース記法ではなく、大文字区切りのキャメルケース記法になるのに注意です。
追加・書き換えはこんなところ
特定のdata属性を持つ要素を取得するには?
ここは本筋からは少し離れます。
以下をJavaScriptでコード的にしたいことが…
- 特定のdata属性を持つ要素を取得したい
- 例えば data-id = 263 の要素を取得とか
それにはセレクタを使って要素取得が可能です。
▼ あるdata属性値を持つ要素取得のコード例
このような感じで document.querySelector() に対して [data属性名="data属性値"] のようなセレクタを渡せばOK。こういった記述はdata属性に限った話ではないです。
ちなみに変数展開にテンプレート文字列も使ってます。
▼ 上記コードでも使ってるテンプレ文字列について
変数展開とか複数行文字列に役立つ記法です。
とりあえずdata属性 ⇒ 要素取得はこういう感じ
遠回りな方法をやめてdatasetを使っていきたい
以前は遠回りな方法でdata属性を扱ってました。
これからはdatasetを積極的に使っていきたいです。
以上、JSでのdata属性の取得・追加でした。ではまた