JavaScript选项卡式界面 - 如何链接和标记选项卡?

时间:2011-03-04 13:28:47

标签: javascript jquery tabs

我已经使用jQuery创建了一个标签界面来显示/隐藏内容。

我希望能够链接到特定标签,并允许用户为他们所在的当前标签添加书签。

当我为每个包含div使用ID时,我可以通过从click事件中删除return false;来实现此目的,但这会导致页面跳到包含该选项卡的div。

有没有办法确保网址包含地址的#部分,但是会阻止网页跳过?还有另一种方法可以解决我尚未遇到的问题吗?

//Get all containers with tab content
var tabContainers = $("div.tab");  

//Get value of # from URL
if (window.location.hash) {

  //if there's a # display the relevant tab
  $(tabContainers).hide().filter(window.location.hash).show();  

} else {
    //Show the first tab
    $(tabContainers).hide().filter(":first").show();    
}


$("ul#tabNav a").click( function () {

    //Hide all tab content then display the current
    $(tabContainers).hide().filter(this.hash).show();

    //prevent page from skipping but also prevents # from appearing in address bar
    return false;

});





<div id="tabNavContainer">
    <ul id="tabNav">
        <li id="tab1"> <a href="#a">Course essentials</a> </li>
        <li id="tab2"> <a href="#b">Course details</a> </li>
        <li id="tab3"> <a href="#c">Next steps</a> </li>
    </ul>
</div>
<div class="tab" id="a">
    <h3>TAB A</h3>
</div>
<div class="tab" id="b">
    <h3>TAB B</h3>
</div>
<div class="tab" id="c">
    <h3>TAB C</h3>
</div>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以设置window.location.hash以及阅读它:

$("ul#tabNav a").click( function () {

    //Hide all tab content then display the current
    $(tabContainers).hide().filter(this.hash).show();

    window.location.hash = this.hash;

    //prevent page from skipping but also prevents # from appearing in address bar
    return false;

});

请注意,这会在浏览器历史记录中添加一个页面,允许用户使用后退和前进按钮来更改哈希值。理想情况下,您还应该考虑处理它。