Bootstrap 4 选项卡不按 URL 显示

Posted

技术标签:

【中文标题】Bootstrap 4 选项卡不按 URL 显示【英文标题】:Bootstrap 4 Tabs doesn't appear by URL 【发布时间】:2018-07-03 21:46:18 【问题描述】:

我有这个 html 结构:

    <div class="row">
        <div class="col-md-3">
            <div class="card p-2">
                <div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
                    <a class="nav-link active" id="general-tab" data-toggle="pill" href="#general" role="tab" aria-controls="general" aria-selected="true">Info generali</a>
                    <a class="nav-link" id="permalink-tab" data-toggle="pill" href="#permalink" role="tab" aria-controls="permalink" aria-selected="false">Permalink</a>
                </div>
            </div>
        </div>

        <div class="col-md-9">
            <div class="card p-3">
            <div class="tab-content" id="v-pills-tabContent">

                <!-- Infos tab -->
                <div class="tab-pane fade show active" id="general" role="tabpanel" aria-labelledby="v-pills-home-tab">
                </div>

                <!-- Permalink tab -->
                <div class="tab-pane fade" id="permalink" role="tabpanel" aria-labelledby="permalink-tab">
                </div>
            </div>
            </div>
        </div>
   </div>

id="general" 选项卡是加载页面时第一个出现的选项卡,但有时我需要直接加载第二个选项卡 id="permalink" 但如果我尝试通过 URL 调用它像这样:

www.somesite.com/edit/4#permalink

不起作用:当页面加载时,它不会调用#permalink 选项卡,而是调用#general 选项卡。

【问题讨论】:

您上面的代码将active 应用于第一个选项卡。要在页面加载时显示第二个标签 active,必须以编程方式设置它。 【参考方案1】:

您的选项卡由 JS 激活,因此通过片段标识符链接到它们不会做任何事情,因为 js 已经隐藏了它们。 必须用js从地址栏的url中获取fragment,手动激活tab。

例子:

url = somethin#profile

如果链接中有#,则显示标签

您可以将其设置为函数并在加载 dom 后立即加载它,或者您可以监听事件。

干杯

//var url = document.location.toString();
console.log('example link');
var url = 'something#profile';
if (url.match('#')) 
    $('.nav-tabs a[href="#' + url.split('#')[1] + '"]').tab('show');
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" data-toggle="tab" href="#home" role="tab">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#profile" role="tab">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#messages" role="tab">Messages</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#settings" role="tab">Settings</a>
  </li>
</ul>

<div class="tab-content">
  <div class="tab-pane active" id="home" role="tabpanel">HOME</div>
  <div class="tab-pane" id="profile" role="tabpanel">PROFILE</div>
  <div class="tab-pane" id="messages" role="tabpanel">MESSAGE</div>
  <div class="tab-pane" id="settings" role="tabpanel">SETTINGS</div>
</div>


<div class="row">
  <div class="col-md-12">
    <div id="tc"></div>
  </div>
</div>

【讨论】:

$('.nav-pills a[href="#' + url.split('#')[1] + '"]').tab('show'); 用于导航药丸 可以使用window.location.hash获取片段

以上是关于Bootstrap 4 选项卡不按 URL 显示的主要内容,如果未能解决你的问题,请参考以下文章

使用UI-Bootstrap 0.11.0,角度js中的活动选项卡不起作用

Github桌面窗口同步按钮消失,历史记录选项卡不起作用

使用 PushViewController 时选项卡不显示

bootstrap-vue 选项卡 - 在 url 中给定锚点打开选项卡内容

RKSwipeBetweenViewControllers 选项卡不显示 ios

Excel 2016 Power View选项卡不显示的问题