简体   繁体   English

如何使用 JQuery 显示自定义导航选项卡的内容?

[英]How to show the content of a custom nav tab with JQuery?

I have made custom tabs with a function in JQuery.我在 JQuery 中使用函数制作了自定义选项卡。 This is my custom tabs:这是我的自定义标签:

<div class="row">
    <div class="col-4 master-advanced-left-tab master-advanced-left-tab-active">
        <p>Item 1</p>
    </div>
    <div class="col-4 master-advanced-left-tab">
        <p>Item 2</p>
    </div>
    <div class="col-4 master-advanced-left-tab">
        <p>Item 3</p>
    </div>
</div>

<div class="item1">
    Show content from item 1
</div>
<div class="item2">
    Show content from item 2
</div>
<div class="item3">
    Show content from item 3
</div>

This is the custom styling I made with the tabs:这是我使用选项卡制作的自定义样式:

.master-advanced-left-tab {
    overflow: hidden;
    cursor: pointer;
    padding-bottom: 10px;
    padding-top: 10px;
}

.master-advanced-left-tab > p {
    text-overflow: ellipsis;
    height: 20px;
}

.master-advanced-left-tab-active {
    color: #1C72DF;
    border-bottom: 3px #1C72DF solid;
}

And this is my function to activate the tabs (working)这是我激活标签的功能(工作)

$('.master-advanced-left-tab').removeClass('master-advanced-left-tab-active');
elem.addClass('master-advanced-left-tab-active');
switch (elem.data('id')) {
    case 'item1':
        //show div for item1
        break;
    case 'item2':
        //show div for item2
        break;
    default:
}

When I switch from tab I want to show the content from the class.当我从选项卡切换时,我想显示课程中的内容。 I have tried with the toggle() function from JQuery.我已经尝试过 JQuery 的toggle()函数。 Also I have checked this stackoverflow post:我也检查了这个stackoverflow帖子:

Bootstrap tab activation with JQuery 使用 JQuery 激活引导选项卡

This is what I want but it didn't work for my solution because I don't use the nav tabs of bootstrap.这是我想要的,但它对我的解决方案不起作用,因为我不使用引导程序的导航选项卡。

How can I show the content from each nav tab?如何显示每个导航选项卡的内容?

To show content you can simply call show() on it.要显示内容,您只需在其上调用show() You can also make your logic more DRY and extensible by converting the clickable div elements to a and using the href attribute to target the content to be displayed.您还可以通过将可点击的div元素转换为a并使用href属性来定位要显示的内容,从而使您的逻辑更加 DRY 和可扩展。 This saves you having to write endless if conditions or switch cases, as it will work for an infinite number of tabs.这使您不必编写无休止的if条件或switch案例,因为它将适用于无限数量的选项卡。 It also means that, if required, you can open tabs when the page loads via the fragment of the URL.这也意味着,如果需要,您可以在页面加载时通过 URL 片段打开选项卡。 Try this:尝试这个:

 let $tabs = $('.tab-content'); let $triggers = $('.master-advanced-left-tab').on('click', function(e) { e.preventDefault(); $triggers.removeClass('master-advanced-left-tab-active'); var $elem = $(this).addClass('master-advanced-left-tab-active'); $tabs.hide(); $tabs.filter($elem.attr('href')).show(); }); $triggers.first().trigger('click');
 .master-advanced-left-tab { display: block; overflow: hidden; cursor: pointer; padding-bottom: 10px; padding-top: 10px; } .master-advanced-left-tab>p { text-overflow: ellipsis; height: 20px; } .master-advanced-left-tab-active { color: #1C72DF; border-bottom: 3px #1C72DF solid; } .tab-content { display: none; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="row"> <a href="#item1" class="col-4 master-advanced-left-tab"> <p>Item 1</p> </a> <a href="#item2" class="col-4 master-advanced-left-tab"> <p>Item 2</p> </a> <a href="#item3" class="col-4 master-advanced-left-tab"> <p>Item 3</p> </a> </div> <div class="tab-content" id="item1"> Show content from item 1 </div> <div class="tab-content" id="item2"> Show content from item 2 </div> <div class="tab-content" id="item3"> Show content from item 3 </div>

hide and show the method can be used for this purpose, Hope this helps hideshow方法可用于此目的,希望这会有所帮助

 $('.master-advanced-left-tab').click(function(e){ $(this).addClass('master-advanced-left-tab-active').siblings().removeClass('master-advanced-left-tab-active') var class1 = $(this).attr('data-id') $('.'+class1+'').removeClass('hide').siblings().addClass('hide') })
 .master-advanced-left-tab { overflow: hidden; cursor: pointer; padding-bottom: 10px; padding-top: 10px; } .master-advanced-left-tab > p { text-overflow: ellipsis; height: 20px; } .master-advanced-left-tab-active { color: #1C72DF; border-bottom: 3px #1C72DF solid; } .hide { display:none; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> <div class="row"> <div class="col-4 master-advanced-left-tab master-advanced-left-tab-active" data-id="item1"> <p>Item 1</p> </div> <div class="col-4 master-advanced-left-tab" data-id="item2"> <p>Item 2</p> </div> <div class="col-4 master-advanced-left-tab" data-id="item3"> <p>Item 3</p> </div> </div> <div class="wrap"> <div class="item1 "> Show content from item 1 </div> <div class="item2 hide"> Show content from item 2 </div> <div class="item3 hide"> Show content from item 3 </div> </div>

You can see my code:你可以看到我的代码:

<div class="row">
  <div class="col-4 master-advanced-left-tab master-advanced-left-tab-active" data-id="item1">
    <p>Item 1</p>
  </div>
  <div class="col-4 master-advanced-left-tab" data-id="item2">
    <p>Item 2</p>
  </div>
  <div class="col-4 master-advanced-left-tab" data-id="item3">
    <p>Item 3</p>
  </div>
</div>

<div class="content-item item1 active">
    Show content from item 1
</div>
<div class="content-item item2">
    Show content from item 2
</div>
<div class="content-item item3">
    Show content from item 3
</div>

Css: add more some line: CSS:添加更多的一些行:

.content-item  {  
   display: none
}
.content-item.active  {
   display: block
}

Then JS:然后JS:

$('.master-advanced-left-tab').click(function (){
  let elem = $(this);
  $('.master-advanced-left-tab').removeClass('master-advanced-left-tab-active');
  $('.content-item').removeClass('active');
  elem.addClass('master-advanced-left-tab-active');
  switch (elem.data('id')) {
      case 'item1':
        $('.item1').addClass('active')
        break;
      case 'item2':
        $('.item2').addClass('active')
        break;
      default:
        $('.item3').addClass('active')
  }
}) 

This is a demo: https://codepen.io/phuongnm153/pen/vYBXBGM这是一个演示: https : //codepen.io/phuongnm153/pen/vYBXBGM

Instead of swith you can use something more responsive like this:除了 swith,您还可以使用响应速度更快的内容,如下所示:

 function changeTab(element) { // remove 'active' class from item and tab to prevent multiple // tab selection $('.master-advanced-left-tab').removeClass('active'); $('.tab').removeClass('active'); // add class 'active' to clicked item and proper tab // tab class is taken from 'data-tab' property from item in html $(element).addClass('active'); $('.tab.' + $(element).data('tab')).addClass('active'); } // change tab to first at init to prevent none tab selected // You can replace this by adding class 'active' to // 'master-advanced-left-tab' and 'tab' item in html changeTab( $('.master-advanced-left-tab:first-child') ); // not much to explain $('.master-advanced-left-tab').on('click', function(){ changeTab(this); })
 .master-advanced-left-tab { overflow: hidden; cursor: pointer; padding-bottom: 10px; padding-top: 10px; } .master-advanced-left-tab > p { text-overflow: ellipsis; height: 20px; } /* changed from .master-advanced-left-tab-active to shorten code */ .master-advanced-left-tab.active { color: #1C72DF; border-bottom: 3px #1C72DF solid; } .tab { height: 0; overflow:hidden; } .tab.active { height: auto; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="row"> <!-- property 'data-tab' for js function to select proper tab --> <div data-tab="item1" class="col-4 master-advanced-left-tab"> <p>Item 1</p> </div> <div data-tab="item2" class="col-4 master-advanced-left-tab"> <p>Item 2</p> </div> <div data-tab="item3" class="col-4 master-advanced-left-tab"> <p>Item 3</p> </div> </div> <div class="tab item1"> Show content from item 1 </div> <div class="tab item2"> Show content from item 2 </div> <div class="tab item3"> Show content from item 3 </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM