HTMLのdata属性をマスター!使い方・カスタマイズ方法10選

HTMLのdata属性を使いこなすためのイラスト HTML
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●HTMLのdata属性を学ぼう!

初心者の皆様、HTMLのdata属性について学ぶ準備はよろしいでしょうか。

本記事では、data属性の基本から応用まで、詳細に解説してまいります。

これから学ぶ内容は、ウェブ開発の現場で即座に活用できる実践的なものばかりです。

さあ、一緩に学んでいきましょう。

●data属性とは何か

data属性は、HTML要素に独自のデータを付与するための強力なツールです。

この属性を使用することで、開発者はJavaScriptやCSSから簡単にデータにアクセスできるようになります。

つまり、HTMLの構造を変えることなく、要素に追加情報を持たせることができるのです。

○data属性の基本構造

data属性の名前は必ず「data-」で始まります。

その後に、開発者が自由に命名できる部分が続きます。

例えば、「data-user-id」や「data-product-code」といった具合です。

この柔軟性により、様々な用途に対応できるのがdata属性の魅力の一つと言えるでしょう。

●data属性の使用方法

それでは、実際にdata属性を使用する方法を見ていきましょう。

ここでは、具体的な例を挙げて説明いたします。

○ボタンにdata属性を付与する

まずは、ボタン要素にdata属性を付与する例を見てみましょう。

<button data-action="save">保存</button>
<button data-action="delete">削除</button>

この例では、各ボタンに「data-action」属性を付与しています。

この属性値を利用することで、JavaScriptでボタンの動作を制御することができます。

○JavaScriptでdata属性の値を取得する

次に、JavaScriptを使ってdata属性の値を取得する方法を見てみましょう。

<button id="exampleButton" data-example="customData">ボタン</button>

<script>
  const button = document.getElementById('exampleButton');
  const customData = button.dataset.example;
  console.log(customData); // "customData"が出力されます
</script>

このコードでは、「dataset」プロパティを使用してdata属性の値にアクセスしています。

非常に簡単ですね。

○JavaScriptでdata属性の値を設定する

data属性の値は、JavaScriptを使って動的に設定することも可能です。

<button id="exampleButton">ボタン</button>

<script>
  const button = document.getElementById('exampleButton');
  button.dataset.example = "newCustomData";
  console.log(button.dataset.example); // "newCustomData"が出力されます
</script>

このように、「dataset」プロパティを使用して新しい値を代入するだけで、data属性の値を変更できます。

○data属性を活用したタブ切り替え機能

data属性の実践的な使用例として、タブ切り替え機能の実装を見てみましょう。

<ul>
  <li data-tab="tab1" class="active">タブ1</li>
  <li data-tab="tab2">タブ2</li>
  <li data-tab="tab3">タブ3</li>
</ul>
<div data-content="tab1">タブ1の内容</div>
<div data-content="tab2" style="display:none;">タブ2の内容</div>
<div data-content="tab3" style="display:none;">タブ3の内容</div>

<script>
  const tabs = document.querySelectorAll('[data-tab]');
  const contents = document.querySelectorAll('[data-content]');

  tabs.forEach(tab => {
    tab.addEventListener('click', () => {
      tabs.forEach(t => t.classList.remove('active'));
      tab.classList.add('active');

      contents.forEach(content => {
        content.style.display = content.dataset.content === tab.dataset.tab ? 'block' : 'none';
      });
    });
  });
</script>

このコードでは、data属性を使ってタブとその内容を関連付けています。

JavaScriptで、クリックされたタブに対応する内容を表示する仕組みになっています。

●data属性の応用例

ここまでdata属性の基本的な使い方を見てきました。

次は、より実践的な応用例を見ていきましょう。

○data属性を利用した簡易グラフの作成

data属性を使えば、HTMLだけで簡単なグラフを作成することができます。

<div class="bar" data-value="30">30%</div>
<div class="bar" data-value="60">60%</div>
<div class="bar" data-value="90">90%</div>

<script>
  const bars = document.querySelectorAll('.bar');

  bars.forEach(bar => {
    const value = bar.dataset.value;
    bar.style.width = `${value}%`;
  });
</script>

このコードでは、各要素の「data-value」属性の値を使って、バーの幅を設定しています。

シンプルながら効果的なグラフ表示が可能になります。

○data属性を活用したソート機能

リストのソート機能もdata属性を使って簡単に実装できます。

<button id="sortButton">並び替え</button>
<ul id="list">
  <li data-value="3">項目3</li>
  <li data-value="1">項目1</li>
  <li data-value="2">項目2</li>
</ul>

<script>
  const sortButton = document.getElementById('sortButton');
  const list = document.getElementById('list');

  sortButton.addEventListener('click', () => {
    const sortedItems = Array.from(list.children).sort((a, b) => {
      return parseInt(a.dataset.value) - parseInt(b.dataset.value);
    });

    list.innerHTML = '';
    sortedItems.forEach(item => list.appendChild(item));
  });
</script>

このコードでは、各リスト項目に「data-value」属性を付与し、その値を基にソートを行っています。

非常にシンプルで効果的な方法ですね。

○data属性を使用したスライダーの実装

スライダー機能もdata属性を使って実装できます。

<div id="slider">
  <div class="slide" data-index="1">スライド1</div>
  <div class="slide" data-index="2">スライド2</div>
  <div class="slide" data-index="3">スライド3</div>
</div>
<button id="prevButton">前へ</button>
<button id="nextButton">次へ</button>

<script>
  const slider = document.getElementById('slider');
  const slides = slider.querySelectorAll('.slide');
  const prevButton = document.getElementById('prevButton');
  const nextButton = document.getElementById('nextButton');
  let currentIndex = 1;

  const updateSlides = () => {
    slides.forEach(slide => {
      slide.style.display = slide.dataset.index == currentIndex ? 'block' : 'none';
    });
  };

  prevButton.addEventListener('click', () => {
    currentIndex = currentIndex - 1 <= 0 ? slides.length : currentIndex - 1;
    updateSlides();
  });

  nextButton.addEventListener('click', () => {
    currentIndex = currentIndex + 1 > slides.length ? 1 : currentIndex + 1;
    updateSlides();
  });

  updateSlides();
</script>

このコードでは、各スライドに「data-index」属性を付与し、その値を使ってスライドの切り替えを制御しています。

○data属性を利用したフィルタリング機能

data属性を使えば、リストのフィルタリング機能も簡単に実装できます。

<select id="filter">
  <option value="all">すべて</option>
  <option value="fruits">果物</option>
  <option value="vegetables">野菜</option>
</select>
<ul id="list">
  <li data-category="fruits">りんご</li>
  <li data-category="fruits">みかん</li>
  <li data-category="vegetables">キャベツ</li>
  <li data-category="vegetables">トマト</li>
</ul>

<script>
  const filter = document.getElementById('filter');
  const list = document.getElementById('list');
  const items = list.querySelectorAll('li');

  filter.addEventListener('change', () => {
    const selectedCategory = filter.value;
    items.forEach(item => {
      item.style.display = selectedCategory === 'all' || item.dataset.category === selectedCategory ? 'block' : 'none';
    });
  });
</script>

このコードでは、各リスト項目に「data-category」属性を付与し、その値を基にフィルタリングを行っています。

○data属性を活用したレーティング機能

レーティング機能もdata属性を使って簡単に実装できます。

<div id="rating">
  <span data-rate="1">★</span>
  <span data-rate="2">★</span>
  <span data-rate="3">★</span>
  <span data-rate="4">★</span>
  <span data-rate="5">★</span>
</div>

<script>
  const rating = document.getElementById('rating');
  const stars = rating.querySelectorAll('span');

  stars.forEach(star => {
    star.addEventListener('click', () => {
      const rate = star.dataset.rate;

      stars.forEach(s => {
        s.style.color = s.dataset.rate <= rate ? 'orange' : 'gray';
      });
    });
  });
</script>

このコードでは、各星に「data-rate」属性を付与し、その値を使ってレーティングの表示を制御しています。

○data属性を使用したカスタムプロパティの設定

data属性を使ってカスタムプロパティを設定し、それを利用することもできます。

<button data-action="open">開く</button>
<button data-action="save">保存</button>
<button data-action="close">閉じる</button>

<script>
  const buttons = document.querySelectorAll('button');

  buttons.forEach(button => {
    button.addEventListener('click', () => {
      const action = button.dataset.action;

      switch (action) {
        case 'open':
          console.log('ファイルを開きます');
          break;
        case 'save':
          console.log('ファイルを保存します');
          break;
        case 'close':
          console.log('ファイルを閉じます');
          break;
      }
    });
  });
</script>

このコードでは、各ボタンに「data-action」属性を付与し、その値に基づいて異なる処理を実行しています。

●使用上の注意点と対処法

data属性は非常に便利なツールですが、使用する際には次の点に注意が必要です。

まず、data属性の名前には大文字を使用しないようにしましょう。

大文字は自動的に小文字に変換されますが、予期せぬエラーを防ぐために、最初から小文字のみを使用することをお勧めします。

次に、data属性はあくまでもカスタムデータを保持するためのものです。

スタイルや構造を直接操作する目的で使用するのは避けましょう。

最後に、大量のデータをdata属性で扱う場合、ページの読み込み速度が遅くなる可能性があります。

そのような場合は、JSONやAJAXを使用してデータを取得することを検討してください。

●カスタマイズ方法

data属性の値に応じて、動的にスタイルを変更することができます。

JavaScriptでdata属性の値を取得し、それに基づいてスタイルを適用する方法が一般的です。

また、data属性を使ってカスタムプロパティを設定し、それを利用することも可能です。

JavaScriptでカスタムプロパティの値を取得し、それに基づいて処理を実行することで、より柔軟な制御が可能になります。

まとめ

本記事では、HTMLのdata属性について、その基本的な使い方から応用例まで、幅広く解説いたしました。

data属性を活用することで、HTMLの構造を変更することなく、要素に追加のデータを持たせることができます。

このように、JavaScriptやCSSとの連携が容易になり、より動的で柔軟なウェブページの作成が可能になります。

今回学んだ内容を活かし、ぜひ皆様のウェブ開発プロジェクトにdata属性を取り入れてみてください。

より豊かで機能的なウェブアプリケーションの作成に役立つことでしょう。

最後に、data属性の使用に際しては、名前に大文字を使わないこと、スタイルや構造の直接操作には使用しないこと、大量のデータ処理には注意が必要であることを忘れずに。

この点に留意しながら、data属性を活用していただければと思います。