0

我有以下代码:fiddle,我该如何设置它以便我可以拥有不同选项卡的 url,我尝试将选项卡 ID 添加到 url 并且不起作用。我也尝试过锚点,但它不起作用,任何帮助表示赞赏。

4

2 回答 2

1

您必须通过绑定单击事件手动触发选项卡切换功能。

HTML:

<ul id="tabs">

      <li><a href="#tab1">test1</a></li>
      <li><a href="#tab2">test2</a></li>
      <li><a href="#tab3">test3</a></li>
      <li><a href="#tab4">test4</a></li>

</ul>

<span class="tablink" data-href="#tab1">link</span>

JS:

$('.tablink').click(function(){
   $('a[href="'+$(this).attr('data-href')+'"]').click();
});

此链接将如同您单击该选项卡一样工作。

它会找到激活标签的链接,并触发它的点击事件。

编辑以适合提问者的 HTML

于 2012-07-30T14:56:41.233 回答
1

你可以很容易地做到这一点。由于您的列表按出现顺序与选项卡本身相对应,因此您不需要 id,您可以这样做:

HTML

<ul id="tabs">
    <li><a href="http://domain.com/#tab1">test1</a></li>
</ul>

<div>
      <div class="container">Some content1</div>
</div>

JavaScript

var tabs = $('#tabs a');
var content = $('.container');
var current = 0;

tabs.click( function(event) {
    // get which element was clicked
    var pos = tabs.index ($(event.target) );
    // remove current active class
    tabs.eq(current).removeClass('active');
    // fade out current element
    content.eq(current).fadeOut( function() {
        //afterwards set current to selected, update class and fade in content
        current = pos;
        tabs.eq(current).addClass('active');
        content.eq( current ).fadeIn();
        // append hash to url
        window.location.hash = tabs.eq(current).attr('href');
    });

    event.preventDefault();
});​

这是将锚点添加到 URL 的行:

window.location.hash = tabs.eq(current).attr('href');

请注意,这在小提琴中不起作用。或者你可以省略这一行并像我在上面的源代码中那样添加真实的 url。

我还优化了您的代码,以便使用更少的选择器并且它更短一些。它还active为当前元素使用单个类(而不是将一个类应用于所有inactive元素)。你只需要调整你的风格。

我还添加了一些 CSS,默认显示第一个元素并隐藏所有其他元素 - 不需要 JavaScript:

.container {
    display:none;
}

.container:first-child {
    display:block;
}

小提琴

http://jsfiddle.net/insertusernamehere/hCWMj/

于 2012-07-30T15:06:44.590 回答