【问题标题】:get the current tab in jQuery UI tabs获取 jQuery UI 选项卡中的当前选项卡
【发布时间】:2013-04-24 12:47:12
【问题描述】:

我在 jQuery UI 对话窗口中使用 jQuery UI 选项卡。

我遇到过一个实例,我需要在单击其中一个对话框按钮时找到当前选项卡的 id。查看由 jQuery UI 选项卡和对话框生成的 HTML,我真的找不到这样做的方法。保持选项卡的<ul> 元素距离对话框按钮组大约 3 个<div>

我试过了:

$("#DialogBox").dialog({
    autoOpen: false,
    modal: true,
    buttons: [
        {
        text: "Save",
        click: function () {
        var currentTabId = $(this).closest("ul").attr("id");
        alert(currentTabId);

但我只是收到一个“未定义”的警报。

有没有办法做到这一点?

谢谢

【问题讨论】:

  • 你能把你的代码发到fiddle吗??

标签: jquery jquery-ui jquery-ui-dialog jquery-ui-tabs


【解决方案1】:
//for getting selected tabs

var tabs = $("#tabs").children().find(".current").attr('href');

【讨论】:

    【解决方案2】:

    这是正确且最简单的一个:

    var active = $(".tab-pane.active").attr("id");
    console.log(active);
    

    您应该在选项卡窗格旁边添加活动选择器。这将返回当前活动的标签 ID。

    【讨论】:

      【解决方案3】:

      ⚡以这种方式为我工作⚡

      var currentTab=$("ul> .ui-tabs-active").attr('aria-controls');
      console.log(currentTab);
      

      【讨论】:

      • 选择器,".ul>.ui-tabs-active" 对我不起作用,ul 不是类,它需要在 之间有空格,
      • 类部分是正确的,谢谢。但是请注意,如果添加空格,它可能不适用于嵌套标签。
      【解决方案4】:

      (这个答案与 JQuery UI 1.12 和之前的几个版本有关。)

      这取决于选项卡的含义...您单击以选择选项卡以及由于单击而显示的面板。您单击的内容是一个列表项<li>,其中包含一个锚点<a> 标记,该标记带有一个指向面板ID 的href 属性(它前面带有一个'#')。面板 id 和 href 值由您设置(不是 JQuery)。默认情况下,列表项没有 id,但锚元素有……它是由 JQuery 生成的,类似于“ui-id-88”。要获取选项卡 ID、锚点 ID 或面板 ID,您可以使用以下命令:

      // if you have nested tabs this might not work... in such case, give 
      // your parent tab and panel a unique class and use it in selector
      var $tabs = $("#tabs");
      var tabIndex = $tabs.tabs("option", "active");
      var $tab = $tabs.find("li[role=tab]").eq(tabIndex);
      var tabId = $tab.attr("id"); // undefined unless set by user
      var anchorId = $tab.attr("aria-labelledby"); // or $tabs.find("ul li a.ui-tabs-anchor").eq(tabIndex).attr("id");
      var panelId = $tab.attr("aria-controls"); //or $tabs.find(".ui-tabs-panel").eq(tabIndex).attr("id");
      // note: panelId will also be in href of anchor with prepended # sign
      alert("tabId=" + tabId + ", anchorId=" + anchorId + ", panelId=" + panelId);
      

      【讨论】:

        【解决方案5】:

        当您需要在 javascript 中选择活动选项卡时,使用 JQuery 3.1.1 和 Jquery UI 1.12.1 也可以使用此方法(“选择”是指在 JQuery 选择器中,而不是“选择”)选项卡处于活动状态,因为该选项卡当然已经处于活动状态)。

        要获得对当前选定标签的引用,首先要获得对活动链接的引用(替换标签容器“myTabs”的 id):

        var $link = $('div[id=myTabs] ul .ui-tabs-active');
        

        $link 的 id 是属性“aria-controls”中的选项卡:

        var $tab = $('#' + $link.attr('aria-controls'));
        

        $tab 是对选项卡主体的引用。例如,您可以调用

        $tab.html('[html here]') 
        

        填充或替换选项卡内容。

        【讨论】:

          【解决方案6】:

          对我有用的是:

          var current_tab = $("#tabs .ui-state-active a").attr('href');
          

          【讨论】:

            【解决方案7】:

            假设 ui tabs container 的 id 是 tab-container。工作的sn-p是

            $('#tab-container').find('>div:nth-of-type(' + ($('#tab-container').tabs("option", "active") + 1) + ')'); 
            

            使用 jQuery UI v1.11.2、jQuery v1.11.3 和 Chrome 45 测试。

            【讨论】:

              【解决方案8】:

              对于 JQuery UI 1.11+,这对我有用:

              $("ul>.ui-tabs-active").attr('aria-controls');
              

              【讨论】:

                【解决方案9】:

                在 jQuery 1.9+ 的情况下使用以下内容,

                var currentTabId = $('div[id="mytabs"] ul .ui-tabs-active').attr("id");
                

                【讨论】:

                • 这看起来像实际答案。
                • 正确,但到底为什么 API 被删除了?这不像获取活动标签是一个不常见的操作。
                【解决方案10】:

                根据手动http://api.jqueryui.com/tabs/活动JqueryUI选项卡的getter是

                var active = $( ".selector" ).tabs( "option", "active" );
                

                *用你的替换".selector"

                然后active.attr( 'id' ) 将返回您所需要的。

                【讨论】:

                • +1 表示第一部分。但是active.attr( 'id' ) 不起作用,因为active 只包含一个数字。所以你无法使用它获取 id。
                • 另外,根据您使用的 jQuery 版本,您可能需要将 'active' 替换为 'selected'。
                • 这不是答案,他需要所选标签的 id 而这个答案给出了活动标签的索引。@Michael 答案是正确的。
                【解决方案11】:

                这对我有用(jQuery 1.9,jQueryUI 1.10)。我没有为早期版本的 jQueryUI 测试过这个,但是如果你有 jQueryUI 1.8 或更早版本,请尝试使用 'select' 而不是 'active'。

                // GET INDEX OF ACTIVE TAB
                // make sure to replace #tabs with the actual selector
                // that you used to create the tabs
                var activeTabIdx = $('#tabs').tabs('option','active');
                
                // ID OF ACTIVE TAB
                // make sure to change #tabs to your selector for tabs
                var selector = '#tabs > ul > li';
                var activeTabID = $(selector).eq(activeTabIdx).attr('id');
                
                // ID OF ACTIVE TAB CONTENT
                // make sure to change #tabs to your selector for tabs
                var selector = '#tabs [id=ui-tabs-' + (activeTabIdx + 1) + ']';
                var activeTabContentID = $(selector).attr('id');
                

                【讨论】:

                • 它给出错误'选项'.......错误:无法在初始化之前调用选项卡上的方法;试图调用方法'option' throw new Error(msg);
                • 错误是正确的。如果您尚未初始化选项卡,则在尝试获取选项时会收到此错误。此答案中的代码是正确的,并且适用于已初始化的选项卡(取决于版本;我很幸运使用 aria-controls 而不是 id.ui-tabs-active 似乎也是可行的,尽管没有文档它可能会在未来的版本中发生变化)。请参阅其他答案以供参考。
                • 活动标签内容的 ID 对我不起作用 - 相反,我可以使用 $(selector).eq(activeTabIdx).find("a").attr("href")(使用 selector 的第一个值)
                • 活动标签内容面板的 id 由用户设置...它绝不是基于活动标签索引。标签的
                • 中定义的锚点将有一个由 JQuery 生成的 id,看起来像 ui-tabs-88,但它也与选项卡的索引无关....它只是一个由生成的唯一 id JQuery,我认为它的价值取决于您的页面上已经创建了多少小部件。
                猜你喜欢
                相关资源
                最近更新 更多
                热门标签