【问题标题】:jQuery tabs tabs() - to show hide separate divs depending on tab1 & tab2jQuery tabs tabs() - 根据 tab1 & tab2 显示隐藏单独的 div
【发布时间】:2012-12-21 19:26:44
【问题描述】:

我想在选择 tab1 时显示特定的 div。与 tab2 相同。请给我一个解决方案以在单击选项卡时显示/隐藏这些 div。我无法识别处于活动状态的这些选项卡的特定类或 ID。我的要求是当点击 tab1 时我需要显示 tab1content1 divs

下面是链接

http://jsfiddle.net/ucaxt/

【问题讨论】:

    标签: jquery jquery-ui-tabs


    【解决方案1】:

    一种不需要将外部内容移动到标签本身的方法是:

    var contents = $('div[id^="content"]').hide();
    $("#tabs").tabs({
        activate: function(evt, ui) {
            var num = ui.newPanel.attr('id').replace(/\D+/g, '');
            contents.hide();
            $('#content' + num).show();
        }
    });​
    

    JS Fiddle demo.

    但是,这种方法确实要求您在要显示的内容div 元素的所有元素的id 上附加一个数字,以便识别单击的选项卡、显示的面板和选项卡的 outside 元素之间的关系;所以你的 HTML 变成:

    <div id="tabs">
        <ul>
            <li><a href="#tab1">Tab1</a></li>
            <li><a href="#tab2">Tab2</a></li>
        </ul>
        <div id="tab1">
            test1
        </div>
        <div id="tab2">
            test2
        </div>
    </div>
    <br/>
    <div id="content1">
        <p>
            on click of first tab (tab1) I need to show this id as well
        </p>
    </div>
    <br/>
    <div id="content2"> <!-- added the '2' to the id here -->
        <p>
            on click of Second tab (tab2) I need to show this id as well
        </p>
    </div>
    

    如果您将内容div 元素包装在一个外部容器中,在我的演示中它有containersid,那么您可以定位divs 以稍微不同地显示/隐藏:

    $("#tabs").tabs({
        activate: function(evt, ui) {
            var num = ui.newPanel.attr('id').replace(/\D+/g, '');
            $('#contents > div').eq(num - 1).show().siblings().hide();
        }
    });
    

    还有 HTML:

    <div id="tabs">
        <ul>
            <li><a href="#tab1">Tab1</a></li>
            <li><a href="#tab2">Tab2</a></li>
        </ul>
        <div id="tab1">
            test1
        </div>
        <div id="tab2">
            test2
        </div>
    </div>
    <br/>
    <div id="contents">
        <div id="content1">
            <p>
                on click of first tab (tab1) I need to show this id as well
            </p>
        </div>
        <br/>
        <div id="content2">
            <p>
                on click of Second tab (tab2) I need to show this id as well
            </p>
        </div>
    </div>
    

    JS Fiddle demo.

    我已经修改了上面的代码,以响应 OP 留下(下面)的评论:

    [On] 加载页面我需要显示内容 div1 以及 tab1 内容。

    function showContent(evt, ui) {
        if (!evt || !ui) {
            return false;
        }
        else {
            // ui.newPanel in the activate event,
            // ui.panel in the create event
            var panel = ui.newPanel || ui.panel,
                num = panel.attr('id').replace(/\D+/g, '');
            $('#contents > div').eq(num - 1).show().siblings().hide();
        }
    }
    $(function() {
        $("#tabs").tabs({
            // runs the function when the tabs are created:
            create: function(evt, ui) {
                showContent(evt, ui);
            },
            // runs the function when the tabs are activated:
            activate: function(evt, ui) {
                showContent(evt, ui);
            }
        });
    });​
    

    JS Fiddle demo.

    【讨论】:

    • 感谢您的快速解决方案。但是在加载页面时,我需要显示内容 div1 以及 tab1 内容
    • 请帮我解决一下。
    • 查看编辑后的答案,我认为最后一个代码 sn-p 应该按照您的需要执行。
    • 如果问题得到解答,并且该答案有效,请考虑接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2016-03-21
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多