如何为当前选中元素添加aria-current属性并移除其他元素该属性
实现点击导航项时切换
aria-current属性 核心逻辑
在切换active类的同步流程里处理无障碍属性:
- 先清除所有导航项的
aria-current属性 - 给当前点击的导航项添加
aria-current="page"属性
修改后的完整代码
JavaScript
document.addEventListener('DOMContentLoaded', function() { const selector = '.nav__link'; const elems = Array.from( document.querySelectorAll( selector ) ); const navigation = document.querySelector( 'nav' ); function makeActive( evt ) { const target = evt.target; if ( !target || !target.matches( selector ) ) { return; } // 移除所有元素的active类和aria-current属性 elems.forEach( elem => { elem.classList.remove( 'active' ); elem.removeAttribute('aria-current'); }); // 给当前选中元素添加active类和aria-current属性 target.classList.add( 'active' ); target.setAttribute('aria-current', 'page'); }; navigation.addEventListener( 'mousedown', makeActive ); });
CSS
* { margin: 0; padding: 0; box-sizing: border-box; } *::before, *::after { box-sizing: border-box; } .container { width: 100%; max-width: 1024px; display: block; margin: 30px auto; } ul { list-style: none; } a { text-decoration: none; } .nav { display: flex; flex-direction: row; justify-content: space-around; align-items: center; } .nav__item { padding: 1rem; } .nav__link { display: block; padding: .3125rem 1.5rem; text-transform: uppercase; } .nav__link.active { border: 1px solid #ff4b4c; color: #ff4b4c; }
HTML
<div class="container"> <nav> <ul class="nav"> <li class="nav__item"><a class="nav__link active" href="#" aria-current="page">当前页面</a></li> <li class="nav__item"><a class="nav__link" href="#">页面1</a></li> <li class="nav__item"><a class="nav__link" href="#">页面2</a></li> <li class="nav__item"><a class="nav__link" href="#">页面3</a></li> </ul> </nav> </div>
关键修改说明
- 在遍历清除所有元素
active类的循环中,新增elem.removeAttribute('aria-current'),统一移除所有导航项的无障碍标记 - 在给当前元素添加
active类后,调用target.setAttribute('aria-current', 'page'),为选中元素添加上符合无障碍规范的属性
内容的提问来源于stack exchange,提问作者Gabriele C.
相关产品推荐
相关产品推荐

