如何在Bootstrap 5.2中刷新浏览器后保留活动标签页焦点
Bootstrap 5 刷新后保留活动标签页的解决方案
Bootstrap 4及以下版本的标签页记忆方案无法直接适配Bootstrap 5,核心原因是Bootstrap 5将标签切换元素从<a>改为了<button>,同时Tab组件的API调用方式也发生了变化。
你的原始HTML结构(无需修改)
<ul class="nav nav-tabs" id="myTab" role="tablist"> <li class="nav-item" role="presentation"> <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button> </li> <li class="nav-item" role="presentation"> <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button> </li> <li class="nav-item" role="presentation"> <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button> </li> </ul> <div class="tab-content" id="myTabContent"> <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">Home tab content</div> <div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">Profile tab content</div> <div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">Contact tab content</div> </div>
适配方案
方案1:原生JS实现(无需jQuery)
Bootstrap 5推荐使用原生JS,无需依赖jQuery:
document.addEventListener('DOMContentLoaded', function() { // 监听标签切换,保存激活状态到localStorage document.querySelectorAll('[data-bs-toggle="tab"]').forEach(btn => { btn.addEventListener('show.bs.tab', function(e) { localStorage.setItem('activeTab', this.getAttribute('data-bs-target')); }); }); // 页面加载时恢复激活标签 const activeTab = localStorage.getItem('activeTab'); if (activeTab) { const targetBtn = document.querySelector(`[data-bs-target="${activeTab}"]`); if (targetBtn) { bootstrap.Tab.getOrCreateInstance(targetBtn).show(); } } });
方案2:jQuery适配版本
如果你仍在使用jQuery,调整后的代码如下:
$(document).ready(function(){ // 监听标签切换事件 $('button[data-bs-toggle="tab"]').on('show.bs.tab', function(e) { localStorage.setItem('activeTab', $(this).attr('data-bs-target')); }); // 恢复激活的标签 const activeTab = localStorage.getItem('activeTab'); if (activeTab) { const targetBtn = $(`#myTab button[data-bs-target="${activeTab}"]`); if (targetBtn.length) { bootstrap.Tab.getOrCreateInstance(targetBtn[0]).show(); } } });
关键调整点
- 选择器从
a[data-toggle="tab"]改为button[data-bs-toggle="tab"],匹配Bootstrap 5的按钮式标签 - 保存的属性从
href改为data-bs-target,对应面板的ID - 使用
bootstrap.Tab.getOrCreateInstance().show()替代旧的.tab('show')方法,符合Bootstrap 5的API规范
内容的提问来源于stack exchange,提问作者Jeremy Person
相关产品推荐
相关产品推荐

