JavaScriptでdata属性を取得・追加する正しい方法/コード例

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属性の取得・追加でした。ではまた