jQuery 核心选项卡脚本 - 多个实例?

标签 jquery jquery-tabs jquery-1.3.2

我的网站上有以下 jQuery 脚本,可以在不重新加载页面的情况下切换选项卡。我正在使用 jQuery core v1.3.2(不是 jQuery UI)

<!-- JS -->
<script type="text/javascript">
    $(function() {
        var tabify = function () {
            var id = $('#content > div').hide().attr('aria-hidden', 'true').filter(window.location.hash || ':first').show().attr('aria-hidden', 'false').attr('id');
            $('#content > ul > li').removeClass('selected').find('a[href=#' + id + ']').parent().addClass('selected');
        }
        setInterval(tabify, 100);
        tabify();
    });
</script>

<!-- HTML -->
<div id="content">

  <ul>
    <li><a href="#blog" role="tab">Blog</a></li>
    <li><a href="#videos" role="tab">Videos</a></li>
    <li><a href="#photos" role="tab">Photos</a></li>
  </ul>            

  <div id="blog" role="tabpanel" aria-labelledby="tab1" aria-hidden="false">Blog Content</div>
  <div id="videos" role="tabpanel" aria-labelledby="tab2" aria-hidden="true">Videos Content</div>
  <div id="photos" role="tabpanel" aria-labelledby="tab3" aria-hidden="true">Photos Content</div>                       

</div>

我想在同一页面上添加此脚本的另一个实例,但仅使用不同的变量名称复制/粘贴此脚本是行不通的。有什么想法吗?

编辑:这是我的第二个实例的 HTML 和 JS。问题是当我单击第二个实例中的选项卡时,它会隐藏第一个实例中的所有内容 div,反之亦然。我希望它们彼此独立。

<!-- JS -->
<script type="text/javascript">
    $(function() {
        var tabifyplayer = function () {
            var idplayer = $('#discography > div').hide().attr('aria-hidden', 'true').filter(window.location.hash || ':first').show().attr('aria-hidden', 'false').attr('idplayer');
            $('#discography > ul > li').removeClass('selected').find('a[href=#' + idplayer + ']').parent().addClass('selected');
        }
        setInterval(tabifyplayer, 100);
        tabifyplayer();
    });
</script>

<!-- HTML -->
<div id="discography">
  <ul>
    <li><a href="#cor-player" role="tab">Chance of Rain (2009)</a></li>
    <li><a href="#debutcd-player" role="tab">Debut CD (2007)</a></li>
  </ul>

  <div id="cor-player" role="tabpanel" aria-labelledby="tab1" aria-hidden="false">Content Goes Here</div>
  <div id="debutcd-player" role="tabpanel" aria-labelledby="tab2" aria-hidden="true">Content Goes Here</div>
</div>

最佳答案

您的代码中有许多区域对元素进行了硬编码。我想您打算为新选项卡集使用另一个容器,因此如果您想要进行最小程度的更改,则需要确保更改代码的这些部分。

<script type="text/javascript">
  $(function() {
    var tabify = function () {
      var id = $('#content > div') // Hard Coded content container.
                .hide()
                .attr('aria-hidden', 'true')
                .filter(window.location.hash || ':first')
                .show()
                .attr('aria-hidden', 'false')
                .attr('id');
      $('#content > ul > li') // Hard Coded tab elements.
        .removeClass('selected')
        .find('a[href=#' + id + ']')
        .parent()
        .addClass('selected');
    }
    setInterval(tabify, 100);
    tabify();
  });
</script>

实际上,稍微调整一下一切,这样你就不会依赖于间隔,你可能会得到更好的服务。

$(function () {
  var mine = $('#content > ul > li > a').click(function () {
    $(this)
      .parent()
      .addClass('selected')
      .siblings('li')
      .removeClass('selected');

    $('#content > div')
      .filter($(this).attr('href') || ':first')
      .show().attr('aria-hidden', 'false')
      .siblings('div')
      .hide().attr('aria-hidden', 'true');
  });

  if (window.location.hash != undefined) {
    mine.filter('[href=' + window.location.hash + ']').click();
  } else {
    mine.filter(':first').click();
  }
});

我相信第二个示例应该接近实现相同的效果(尽管查看您的 HTML 结构将帮助我验证这一点),并且更容易适应另一组元素。

关于jQuery 核心选项卡脚本 - 多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175237/

相关文章:

javascript - HTML5 Canvas - 按类在所有 Canvas 元素中绘制相同的内容

jquery - 从 jquery 选项卡中删除背景颜色

jquery - JQuery 选项卡底部的空白区域

jquery - 页面 : Close all other tabs when another is opened 上有多个 jQuery UI 选项卡

javascript - 使用 $.each() 遍历 document.styleSheets 时出现无效的过程调用或参数 IE 问题

javascript - 是否可以阻止 jqGrid 行被选择和/或突出显示?

javascript - JQuery 添加 HTML 和事件

javascript - 如何更改一个div的内容来切换另一个div?

javascript - IE9 : Why setting "-ms-transform" works from css, 但不是 jquery.css()

ajax - 如何在所有ajax请求中发送 token