【问题标题】:Single tab multiple content bootstrap 4单选项卡多内容引导程序 4
【发布时间】:2019-07-26 12:52:54
【问题描述】:

我正在开发引导选项卡,我正在尝试使用具有多个内容 div 的单个选项卡。我尝试过使用两个数据目标值,例如data-target=".etab-p1, .etabi-img1"。但它仅适用于一个内容 div,其他第二个内容不会改变。

$(document).ready(function() {
  $('#myTab a').click(function() {
    var href = $(this).attr('href');
    if (href == "[href^='tab-']") {
      $('.tab-pane').css('display', 'none');
      $("[class^='etab-'][class^='etabi-']").removeClass('show');
      $("[class^='etab-'][class^='etabi-']").css('display', 'block');
      $("[class^='etab-'][class^='etabi-']").addClass('show');
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />

<ul id="myTab" class="nav nav-tabs" role="tablist">
  <li class="nav-item"><a class="nav-link" href="#tab-1" data-target=".etab-p1, .etabi-img1" data-toggle="tab">C1</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-2" data-target=".etab-p2, .etabi-img2" data-toggle="tab">C2</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-3" data-target=".etab-p3, .etabi-img3" data-toggle="tab">C3</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-4" data-target=".etab-p4, .etabi-img4" data-toggle="tab">C4</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-5" data-target=".etab-p5, .etabi-img5" data-toggle="tab">C5</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-6" data-target=".etab-p6, .etabi-img6" data-toggle="tab">C6</a></li>
</ul>
<div class="tab-content">
  <div class="tab-pane fade show active etab-p1">
    <p>Content 1.</p>
  </div>
  <div class="tab-pane fade etab-p2">
    <p>Content 2.</p>
  </div>
  <div class="tab-pane fade etab-p3">
    <p>Content 3.</p>
  </div>
  <div class="tab-pane fade etab-p4">
    <p>Content 4.</p>
  </div>
  <div class="tab-pane fade etab-p5">
    <p>Content 5.</p>
  </div>
  <div class="tab-pane fade etab-p6">
    <p>Content 6.</p>
  </div>
</div>
<div class="tab-content">
  <div class="tab-pane fade show active etabi-img1">
    <p>Content 111.</p>
  </div>
  <div class="tab-pane fade etabi-img2">
    <p>Content 2222.</p>
  </div>
  <div class="tab-pane fade etabi-img3">
    <p>Content 3333.</p>
  </div>
  <div class="tab-pane fade etabi-img4">
    <p>Content 4444.</p>
  </div>
  <div class="tab-pane fade etabi-img5">
    <p>Content 5555.</p>
  </div>
  <div class="tab-pane fade etabi-img6">
    <p>Content 6666.</p>
  </div>
</div>

【问题讨论】:

  • 你想当小提琴,2 你提到我有两个标签,这是否意味着你已经有两个标签,还想要两个。
  • @NickCoder 实际上我已经尝试了多种方法,但无法实现所需的输出,这就是为什么如果有人发布小提琴它将有助于理解代码并显示它可以正常工作。
  • @NickCoder 简单的两个选项卡在同一页面上工作,每个选项卡都有两个内容 div,当单击选项卡时,两个 div 必须更改
  • 您想仅使用 bootstrap 4 选项卡或任何其他方式来实现此目的吗?

标签: javascript jquery html css bootstrap-4


【解决方案1】:

使用show.bs.tab事件

$('#myTab a[data-toggle="tab"]').on('show.bs.tab', function(e) {
  let target = $(e.target).data('target');
  $(target)
    .addClass('active show')
    .siblings('.tab-pane.active')
    .removeClass('active show')
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />

<ul id="myTab" class="nav nav-tabs" role="tablist">
  <li class="nav-item"><a class="nav-link active show" href="#tab-1" data-target=".etab-p1, .etabi-img1" data-toggle="tab">C1</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-2" data-target=".etab-p2, .etabi-img2" data-toggle="tab">C2</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-3" data-target=".etab-p3, .etabi-img3" data-toggle="tab">C3</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-4" data-target=".etab-p4, .etabi-img4" data-toggle="tab">C4</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-5" data-target=".etab-p5, .etabi-img5" data-toggle="tab">C5</a></li>
  <li class="nav-item"><a class="nav-link" href="#tab-6" data-target=".etab-p6, .etabi-img6" data-toggle="tab">C6</a></li>
</ul>
<div class="tab-content">
  <div class="tab-pane fade show active etab-p1">
    <p>Content 1.</p>
  </div>
  <div class="tab-pane fade etab-p2">
    <p>Content 2.</p>
  </div>
  <div class="tab-pane fade etab-p3">
    <p>Content 3.</p>
  </div>
  <div class="tab-pane fade etab-p4">
    <p>Content 4.</p>
  </div>
  <div class="tab-pane fade etab-p5">
    <p>Content 5.</p>
  </div>
  <div class="tab-pane fade etab-p6">
    <p>Content 6.</p>
  </div>
</div>
<div class="tab-content">
  <div class="tab-pane fade show active etabi-img1">
    <p>Content 111.</p>
  </div>
  <div class="tab-pane fade etabi-img2">
    <p>Content 2222.</p>
  </div>
  <div class="tab-pane fade etabi-img3">
    <p>Content 3333.</p>
  </div>
  <div class="tab-pane fade etabi-img4">
    <p>Content 4444.</p>
  </div>
  <div class="tab-pane fade etabi-img5">
    <p>Content 5555.</p>
  </div>
  <div class="tab-pane fade etabi-img6">
    <p>Content 6666.</p>
  </div>
</div>

【讨论】:

    【解决方案2】:

    $(document).ready(function() { 
    $('#myTab a').click(function(){
    	var href = $(this).attr('href');
      if(href == "#profile") {
       $('.profile, .profile_else').css('display','')
      	$('.profile, .profile_else').addClass('show')
        $('.profile, .profile_else').removeClass('hide')
        $('.home, .home_else').removeClass('show')
        $('.home, .home_else').addClass('hide')
      }
      if(href == "#home") {
    		$('.home, .home_else').addClass('show')
        $('.home, .home_else').removeClass('hide')
      	$('.home, .home_else').css('display','')
        $('.profile, .profile_else').removeClass('show')
        $('.profile, .profile_else').addClass('hide')
      }
    })
    })
    body {
        padding:70px;
    }
    .tab-content{
      display: inline-block;
      width: 49%;
    }
    .show{
     display: block !important;
    }
    .hide{
      display: none !important;
    }
    .nav-link.active{
      background-color: red !important;
      color: #fff !important;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
    
    <ul id="myTab" class="nav nav-tabs" role="tablist">
            <li class="nav-item active"><a class="nav-link" href="#home" data-target=".home, .home_else" data-toggle="tab">C1</a></li>
            <li class="nav-item"><a class="nav-link" href="#profile" data-target=".profile, .profile_else" data-toggle="tab">C2</a></li>
        </ul>
    <div id="myTabContent" class="tab-content">
        <div class="tab-pane fade show home">
            <p>Content 1.</p>
        </div>
        <div class="tab-pane fade hide profile">
            <p>Content 2.</p>
        </div>
    </div>
    <div id="myTabContent" class="tab-content">
        <div class="tab-pane fade show home_else">
            <p>Content 111.</p>
        </div>
        <div class="tab-pane fade hide profile_else">
            <p>Content 2222.</p>
        </div>
    </div>

    仅使用 id 不要在数据目标中使用多个 id。 在单个选项卡 div 中添加多个内容 div。

    【讨论】:

    • 我已经更新了我的问题以便更好地理解现在检查它。
    【解决方案3】:

    看看这个例子。

    $(function(){
        $('#tabcontainer .tabs').hide().eq(0).show();
        $('#tabcontainer-2 .tabs').hide().eq(0).show();
        $('#tabs li').click(function(){
            num = $('#tabs li').index(this);
            $('#tabcontainer .tabs').hide().eq(num).show();
            $('#tabcontainer-2 .tabs').hide().eq(num).show();
        });
    });
    #tabs li {list-style: none; background:#ccc; padding: 10px;}
    #tabcontainer-2{
        width:200px;
        margin-left:15px;
        float:left;
        position:relative;
    }
    #tabcontainer{
        width:200px;
        margin-left:15px;
        float:left;
        position:relative;
    }
    ul li{
        width:75px;
        float:left;
        position relative;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <ul id="tabs">
    		<li><a href="#">Link 1</a></li>
    		<li><a href="#">Link 2</a></li>
    		<li><a href="#">Link 3</a></li>
    		<li><a href="#">Link 4</a></li>
    </ul><br/><br/><br/><br/>
    	
    	<div id="tabcontainer">
    		<div id="tabcontent1" class="tabs">Content1 from link 1</div>
    		<div id="tabcontent2" class="tabs">Content1 from link 2</div>
    		<div id="tabcontent3" class="tabs">Content1 from link 3</div>
    		<div id="tabcontent4" class="tabs">Content1 from link 4</div>	
    	</div>
    	
    	<div id="tabcontainer-2">
    		<div id="tabcontent1-2" class="tabs">Content2 from link 1</div>
    		<div id="tabcontent2-2" class="tabs">Content2 from link 2</div>
    		<div id="tabcontent3-3" class="tabs">Content2 from link 3</div>
    		<div id="tabcontent4-4" class="tabs">Content2 from link 4</div>
    	</div>

    【讨论】:

      【解决方案4】:

      bootstrap 本身提供了一个简单的选项卡。 请看一下。这是我在项目中使用的示例。

      $(document).ready(function(){
        $(".nav-tabs a").click(function(){
          $(this).tab('show');
        });
        $('.nav-tabs a').on('shown.bs.tab', function(event){
          var x = $(event.target).text();         // active tab
          var y = $(event.relatedTarget).text();  // previous tab
          $(".act span").text(x);
          $(".prev span").text(y);
        });
      });
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
        <div class="container">
        <ul class="nav nav-tabs">
          <li class="active"><a href="#home">Home</a></li>
          <li><a href="#menu1">Menu 1</a></li>
          <li><a href="#menu2">Menu 2</a></li>
          <li><a href="#menu3">Menu 3</a></li>
        </ul>
      
        <div class="tab-content">
          <div id="home" class="tab-pane fade in active">
            <h3>HOME</h3>
            <p style='color:pink'>I am working on bootstrap tabs, I am trying for the single tab with multiple content div's. I have tried by using two data-target values like data-target=".etab-p1, .etabi-img1".but it only works for ..</p>
             <p style='color:green'>I am working on bootstrap tabs, I am trying for the single tab with multiple content div's. I have tried by using two data-target values like data-target=".etab-p1, .etabi-img1".but it only works for ..</p>
          </div>
          <div id="menu1" class="tab-pane fade">
            <h3>Menu 1</h3>
            <p style='color:red;'>Tab based navigations provides an easy and powerful mechanism to handle huge amount of content within a small area through separating content into different panes where each pane is viewable one at a time. The user can quickly access the content through switching between the panes without leaving the page. The following example will show you how to create the basic tabs using the Bootstrap tab component.</p>
            <p style='color:green;'>Tab based navigations provides an easy and powerful mechanism to handle huge amount of content within a small area through separating content into different panes where each pane is viewable one at a time. The user can quickly access the content through switching between the panes without leaving the page. The following example will show you how to create the basic tabs using the Bootstrap tab component.</p>
          </div>
          <div id="menu2" class="tab-pane fade">
            <h3>Menu 2</h3>
            <p style='color:green;'>	This event fires after the previous active tab is hidden and a new tab is shown. You can use the event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively.	This event fires after the previous active tab is hidden and a new tab is shown. You can use the event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively..</p>
               <p style='color:red;'>	This event fires after the previous active tab is hidden and a new tab is shown. You can use the event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively.	This event fires after the previous active tab is hidden and a new tab is shown. You can use the event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively..</p>
          </div>
          <div id="menu3" class="tab-pane fade">
            <h3>Menu 3</h3>
            <p style='color:blue'>You can activate a tab component without writing any JavaScript — simply specify the data-toggle="tab" on each tab, as well as create a .tab-pane with unique ID for every tab and wrap them in .tab-content. The following example will show you how to create a basic tabbable tabs via data attributes in Bootstrap.</p>
              <p style='color:cyan'>You can activate a tab component without writing any JavaScript — simply specify the data-toggle="tab" on each tab, as well as create a .tab-pane with unique ID for every tab and wrap them in .tab-content. The following example will show you how to create a basic tabbable tabs via data attributes in Bootstrap.</p>
          </div>
        </div>
          <hr>
          <p class="act"><b>Active Tab</b>: <span></span></p>
          <p class="prev"><b>Previous Tab</b>: <span></span></p>
      </div>

      【讨论】:

        【解决方案5】:

        这里有一个代码 sn-p 可以帮助您解决问题:

        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
        
        <ul class="nav nav-tabs" role="tablist">
        	<li class="nav-item">
        		<a class="nav-link active" data-toggle="tab" href="#tabs-1" role="tab">First Panel</a>
        	</li>
        	<li class="nav-item">
        		<a class="nav-link" data-toggle="tab" href="#tabs-2" role="tab">Second Panel</a>
        	</li>
        	<li class="nav-item">
        		<a class="nav-link" data-toggle="tab" href="#tabs-3" role="tab">Third Panel</a>
        	</li>
        </ul><!-- Tab panes -->
        <div class="tab-content">
        	<div class="tab-pane active" id="tabs-1" role="tabpanel">
        		<div>First Panel div1</div>
        		<div>First Panel div2</div>
        	</div>
        	
        	<div class="tab-pane" id="tabs-2" role="tabpanel">
        		<div>Second Panel div1</div>
        		<div>Second Panel div2</div>
        	</div>
        	<div class="tab-pane" id="tabs-2" role="tabpanel">
        		<p>Second Panel duv2</p>
        	</div>
        	<div class="tab-pane" id="tabs-3" role="tabpanel">
        		<p>Third Panel</p>
        	</div>
        </div>

        【讨论】:

          【解决方案6】:

          编辑:试试这个

          <!DOCTYPE html>
          <html lang="en">
          <head>
            <title>Bootstrap Example</title>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
           <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
          <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
          <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
          </head>
          <body>
          
          <div class="container">
            <ul class="nav nav-tabs">
              <li class="active"><a data-toggle="tab" href="#menu1">Menu 1</a></li>
              <li><a data-toggle="tab" href="#menu2">Menu 2</a></li>
            </ul>
          
            <div class="tab-content">
              <div id="menu1" class="tab-pane fade">
                <div class="container">
                <div class="row">
                        <div class="col">
                          Content 1
                        </div>
                        <div class="col">
                          Another Content 1
                        </div>
                </div>
              </div>
          
              </div>
              <div id="menu2" class="tab-pane fade">
                <div class="container hide">
                <div class="row">
                        <div class="col">
                          Content 2
                        </div>
                        <div class="col">
                          Another Content 2
                        </div>
                </div>
              </div>
              </div>
            </div>
          </div>
          </body>
          </html>

          【讨论】:

          • @R oV 如果 `Another Content 1` 在另一个 div 中怎么办。在这里,您正在使用相同的 id 在同一个父 div 中进行操作。
          • 对不起,我错误地删除了我以前的代码 sn-p。只需添加javascript函数并将'Another Content 1' div放在tab-content div之外
          • @R oV 仍然无法工作,请您发布您的代码的 sn-p。
          • @Husna 我更新了我的答案,评论是否答案,希望提供更多帮助;)
          • @R oV 你不明白我要向你解释什么。内容 div 位于页面上的不同位置,完全有两个不同的块,例如:页眉中的一个内容,然后是页脚中的第二个内容,我正在尝试更改这些块。使用 id 和 href
          【解决方案7】:

          我已经用 jquery 解决了你的问题。

          解决办法如下:

          $(document).ready(function() {
            $('#myTab a').click(function() {
              var href = $(this).attr('href');
              var num = href.split("-")[1];
                $('.tab-pane').css('display', 'none');
                $("[class^='etab-'][class^='etabi-']").removeClass('show');
                $(".etab-p"+num).css('display', 'block');
                $(".etabi-img"+num).css('display', 'block');
                $(".etab-p"+num).addClass('show');
                $(".etabi-img"+num).addClass('show');
            });
          });
          body {
              padding:70px;
          }
          <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
          <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
          <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
          
          <ul id="myTab" class="nav nav-tabs" role="tablist">
            <li class="nav-item"><a class="nav-link" href="#tab-1" data-target=".etab-p1, .etabi-img1" data-toggle="tab">C1</a></li>
            <li class="nav-item"><a class="nav-link" href="#tab-2" data-target=".etab-p2, .etabi-img2" data-toggle="tab">C2</a></li>
            <li class="nav-item"><a class="nav-link" href="#tab-3" data-target=".etab-p3, .etabi-img3" data-toggle="tab">C3</a></li>
            <li class="nav-item"><a class="nav-link" href="#tab-4" data-target=".etab-p4, .etabi-img4" data-toggle="tab">C4</a></li>
            <li class="nav-item"><a class="nav-link" href="#tab-5" data-target=".etab-p5, .etabi-img5" data-toggle="tab">C5</a></li>
            <li class="nav-item"><a class="nav-link" href="#tab-6" data-target=".etab-p6, .etabi-img6" data-toggle="tab">C6</a></li>
          </ul>
          <div class="tab-content">
            <div class="tab-pane fade show active etab-p1">
              <p>Content 1.</p>
            </div>
            <div class="tab-pane fade etab-p2">
              <p>Content 2.</p>
            </div>
            <div class="tab-pane fade etab-p3">
              <p>Content 3.</p>
            </div>
            <div class="tab-pane fade etab-p4">
              <p>Content 4.</p>
            </div>
            <div class="tab-pane fade etab-p5">
              <p>Content 5.</p>
            </div>
            <div class="tab-pane fade etab-p6">
              <p>Content 6.</p>
            </div>
          </div>
          <div class="tab-content">
            <div class="tab-pane fade show active etabi-img1">
              <p>Content 111.</p>
            </div>
            <div class="tab-pane fade etabi-img2">
              <p>Content 2222.</p>
            </div>
            <div class="tab-pane fade etabi-img3">
              <p>Content 3333.</p>
            </div>
            <div class="tab-pane fade etabi-img4">
              <p>Content 4444.</p>
            </div>
            <div class="tab-pane fade etabi-img5">
              <p>Content 5555.</p>
            </div>
            <div class="tab-pane fade etabi-img6">
              <p>Content 6666.</p>
            </div>
          </div>

          【讨论】:

          • 是的,我之前浏览过这个链接,问题是cdn non-standard,一旦检查过
          • @Husna 你检查过新小提琴了吗?link
          • 我已经更新了我的问题以便更好地理解现在检查它。
          • @Husna 请尝试this fiddle,让我知道它是否有效。
          • @Husna 我还编辑了答案并添加了 sn-p。请检查并让我知道它是否有效。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多