Kodokon kodokon.com

グローバル属性と data-*

どこでも使える属性を活用し、独自のデータを HTML に格納する。

7 分 · 3 問

このレッスンを Kodokon で開く

一部の属性は どんな要素にも 使えます。これがグローバル属性です。idclass はすでに使っていますね。ここに hidden(要素を隠す)、lang(ある一節の言語を示す)、title(ホバー時のツールチップ)、tabindex(キーボードフォーカスの順序)を道具箱に加えましょう。

HTML
<p lang="en" title="Original quote">
  Stay hungry, stay foolish.
</p>

<div hidden id="cookie-banner" class="banner">
  We use cookies.
</div>
実際の場面での lang、title、hidden。

独自のデータを要素に付けたいですか? でたらめな属性を勝手に発明してはいけません。HTML は、まさにそのために data-* 属性を用意しています。ダッシュのあとの名前は自分で決め、小文字のケバブケースにします。典型的な利用例: 商品の識別子、UI の状態、コンポーネントの設定などです。

HTML
<article
  class="product-card"
  data-product-id="42"
  data-category="books"
  data-in-stock="true"
>
  <h2>HTML for pros</h2>
</article>
商品カードに付与された業務データ。

JavaScript 側では、これらの属性は dataset プロパティ経由で読み取ります。自動変換に注意してください。HTML のケバブケースは JavaScript ではキャメルケースになります。つまり data-product-iddataset.productId で読み取ります。値は常に 文字列 で、"true""42" でさえもそうです。

JAVASCRIPT
const card = document.querySelector(".product-card");

console.log(card.dataset.productId); // "42"
console.log(card.dataset.inStock);   // "true"

card.dataset.state = "selected";
dataset を通じた data-* の読み書き。

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. JavaScript で data-user-id 属性をどう読み取りますか?
    • element.dataset.userId
    • element.dataset.user-id
    • element.data.userId
    • element.getData("user-id")
  2. data-* 属性は何のためのものですか?
    • JavaScript が読み取れるカスタムデータを格納するため
    • ページのデータの読み込みを高速化するため
    • フォーム送信時にサーバーへデータを送るため
  3. 要素をセマンティックに隠すグローバル属性はどれですか?
    • hidden
    • invisible
    • display