dataset でカスタムデータ属性を扱う
dataset は、data-* 属性を簡単に扱うためのプロパティです。カスタムデータをHTML要素に埋め込んで、JavaScript から読み書きできます。
data-* 属性とは
HTML では data- で始まる属性を自由に定義できます。
<div id="user"
data-id="123"
data-name="田中太郎"
data-is-admin="true">
ユーザー情報
</div>dataset で取得する
element.dataset でオブジェクトとしてアクセスできます。
const user = document.getElementById('user');
console.log(user.dataset.id); // "123"
console.log(user.dataset.name); // "田中太郎"
console.log(user.dataset.isAdmin); // "true"ハイフン区切りの属性名はキャメルケースになります。
| HTML属性 | dataset プロパティ |
|---|---|
| data-id | dataset.id |
| data-user-name | dataset.userName |
| data-is-admin | dataset.isAdmin |
dataset で設定する
user.dataset.id = '456';
user.dataset.role = 'editor'; // data-role が追加される削除する
delete user.dataset.role;実際に動かしてみよう
カードをクリックすると、埋め込まれたデータを表示します。
HTML
CSS
JavaScript
<div class="card" data-product="りんご" data-price="150" data-stock="25">
商品A
</div>
<div class="card" data-product="みかん" data-price="100" data-stock="50">
商品B
</div>
<p id="info">カードをクリックしてください</p>.card {
padding: 15px;
margin: 5px;
background: #f5f5f5;
border-radius: 4px;
cursor: pointer;
}
.card:hover {
background: #e0e0e0;
}document.querySelectorAll('.card').forEach(card => {
card.addEventListener('click', function() {
const info = document.getElementById('info');
const d = this.dataset;
info.textContent = d.product + ' / ' + d.price + '円 / 在庫' + d.stock;
});
});getAttribute との違い
dataset
キャメルケースでアクセス。オブジェクトとして扱いやすい
getAttribute
属性名そのままで指定。data- プレフィックスが必要
// 同じ結果
user.dataset.userName
user.getAttribute('data-user-name')実践的な使い方
イベント委譲と組み合わせると、動的な UI を作りやすくなります。
<button data-action="save">保存</button>
<button data-action="delete">削除</button>
<button data-action="cancel">キャンセル</button>document.addEventListener('click', function(e) {
const action = e.target.dataset.action;
if (action === 'save') saveData();
if (action === 'delete') deleteData();
if (action === 'cancel') cancel();
});dataset を使えば、HTML にデータを埋め込んで JavaScript から簡単に参照できます。