dom_dom0900_004

タブ切り替えUIでは、クリックしたタブにaria-selected=”true”を付与し、非アクティブにはfalseを設定する。対応するパネルはhiddenを切り替える。タブからパネルを特定するには( A )属性で関連付け、クリック時に( B )で対象要素を取得する。

解答

A: aria-controls
B: getElementById

解説

WAI-ARIAパターンでは、タブにaria-controlsでパネルIDを紐付ける。イベントでそのIDを取り出し、document.getElementByIdでパネルDOMを取得し可視状態を切り替える。

使用例(サンプルコード)

[ html ]

<div role="tablist">
  <button role="tab" aria-controls="p1" aria-selected="true">Tab1</button>
  <button role="tab" aria-controls="p2" aria-selected="false">Tab2</button>
</div>
<section id="p1">Panel 1</section>
<section id="p2" hidden>Panel 2</section>
<script>
document.querySelector('[role=tablist]').addEventListener('click', e=>{
  if(e.target.role !== 'tab' && e.target.getAttribute('role') !== 'tab') return;
  document.querySelectorAll('[role=tab]').forEach(t=>t.setAttribute('aria-selected','false'));
  e.target.setAttribute('aria-selected','true');
  document.querySelectorAll('section[id]').forEach(p=>p.hidden=true);
  const id = e.target.getAttribute('aria-controls'); // (A)
  document.getElementById(id).hidden = false;        // (B)
});
</script>