我正在开发一个网页,我在其中使用 Twitter 的 Bootstrap 框架和他们的Bootstrap Tabs JS。除了一些小问题外,它的效果很好,其中之一是我不知道如何从外部链接直接转到特定选项卡。例如:
<a href="facility.php#home">Home</a>
<a href="facility.php#notes">Notes</a>
单击外部页面的链接时,应分别转到“主页”选项卡和“备注”选项卡
我正在开发一个网页,我在其中使用 Twitter 的 Bootstrap 框架和他们的Bootstrap Tabs JS。除了一些小问题外,它的效果很好,其中之一是我不知道如何从外部链接直接转到特定选项卡。例如:
<a href="facility.php#home">Home</a>
<a href="facility.php#notes">Notes</a>
单击外部页面的链接时,应分别转到“主页”选项卡和“备注”选项卡
这是我对问题的解决方案,可能有点晚了。但它也许可以帮助其他人:
// Javascript to enable link to tab
var hash = location.hash.replace(/^#/, ''); // ^ means starting, meaning only match the first hash
if (hash) {
$('.nav-tabs a[href="#' + hash + '"]').tab('show');
}
// Change hash for page-reload
$('.nav-tabs a').on('shown.bs.tab', function (e) {
window.location.hash = e.target.hash;
})
更新
对于 Bootstrap 3,更改.on('shown', ...)
为.on('shown.bs.tab', ....)
这是基于@dubbe答案和这个SO 接受的答案。它处理window.scrollTo(0,0)
无法正常工作的问题。问题是,当您替换显示的选项卡上的 url 哈希时,浏览器将滚动到该哈希,因为它是页面上的一个元素。为了解决这个问题,添加一个前缀,这样哈希就不会引用实际的页面元素
// Javascript to enable link to tab
var hash = document.location.hash;
var prefix = "tab_";
if (hash) {
$('.nav-tabs a[href="'+hash.replace(prefix,"")+'"]').tab('show');
}
// Change hash for page-reload
$('.nav-tabs a').on('shown', function (e) {
window.location.hash = e.target.hash.replace("#", "#" + prefix);
});
使用示例
如果您有带有 id="mytab" 的选项卡窗格,则需要像这样放置链接:
<a href="yoursite.com/#tab_mytab">Go to Specific Tab </a>
您可以click
在相应的选项卡链接上触发事件:
$(document).ready(function(){
if(window.location.hash != "") {
$('a[href="' + window.location.hash + '"]').click()
}
});
这是 dubbe 解决方案的改进实现,可防止滚动。
// Javascript to enable link to tab
var url = document.location.toString();
if (url.match('#')) {
$('.nav-tabs a[href="#'+url.split('#')[1]+'"]').tab('show') ;
}
// With HTML5 history API, we can easily prevent scrolling!
$('.nav-tabs a').on('shown.bs.tab', function (e) {
if(history.pushState) {
history.pushState(null, null, e.target.hash);
} else {
window.location.hash = e.target.hash; //Polyfill for old browsers
}
})
虽然提供的 JavaScript 解决方案可能有效,但我采用了一种稍微不同的方式,不需要额外的 JavaScript,但在您的视图中确实需要逻辑。您创建一个带有标准 URL 参数的链接,例如:
<a href = "http://link.to.yourpage?activeTab=home">My Link</a>
然后您只需检测 activeTab 的值以在适当的位置写入 'class="active"' <li>
伪代码(用您的语言相应地实现)。请注意,如果此示例中未提供参数,我已将“主页”选项卡设置为默认活动。
$activetabhome = (params.activeTab is null or params.activeTab == 'home') ? 'class="active"' : '';
$activetabprofile = (params.activeTab == 'profile') ? 'class="active"' : '';
<li $activetabhome><a href="#home">Home</a></li>
<li $activetabprofile><a href="#profile">Profile</a></li>