【问题标题】:How to hide other tabs's content and display only the selected tab's content如何隐藏其他选项卡的内容并仅显示选定选项卡的内容
【发布时间】:2019-08-18 01:04:05
【问题描述】:

当我单击特定选项卡时,其他选项卡的内容应该被隐藏,但它没有隐藏。这就是我拥有的所有代码。

function showStuff(id) {
  if (document.getElementById(id).style.display === "block") {
    document.getElementById(id).style.display = "none";
  } else {
    document.getElementById(id).style.display = "block";
  }
}
<ul class="side bar tabs">
  <li id="tabs1" onclick="showStuff('tabs-1')">City</li>
  <li id="tabs2" onclick="showStuff('tabs-2')">Country</li>
  <li id="tabs3" onclick="showStuff('tabs-3')">Humanity</li>
</ul>

<div id="tabs-1" style="display : none">
  <p>Proin elit m</p>
</div>
<div id="tabs-2" style="display : none">
  <p>M massa ut d</p>
</div>
<div id="tabs-3" style="display : none">
  <p> sodales.</p>
</div>

【问题讨论】:

  • 能否添加标签内容的 HTML?
  • 您是否为标签内容设置了id
  • 是的,我所有的标签内容都有 ID

标签: javascript html css user-interface tabs


【解决方案1】:

为所有 tab 内容 元素提供一个通用 CSS 类可以更轻松地选择和设置样式,例如在 this demo 和下面的代码中。

CSS

.tabContent {
    display:none;
}

JavaScript

function showStuff(element)  {
    var tabContents = document.getElementsByClassName('tabContent');
    for (var i = 0; i < tabContents.length; i++) { 
        tabContents[i].style.display = 'none';
    }

    // change tabsX into tabs-X in order to find the correct tab content
    var tabContentIdToShow = element.id.replace(/(\d)/g, '-$1');
    document.getElementById(tabContentIdToShow).style.display = 'block';
}

HTML

<ul class="side bar tabs">
    <li id="tabs1" onclick="showStuff(this)">City</li>
    <li id="tabs2" onclick="showStuff(this)">Country</li>
    <li id="tabs3" onclick="showStuff(this)">Humanity</li>  
</ul>

<div id="tabs-1" class="tabContent">
    <p>Proin elit m</p>
</div>
<div id="tabs-2" class="tabContent">
    <p>M massa ut d</p>
</div>
<div id="tabs-3" class="tabContent">
    <p> sodales.</p>
</div>

我还更新了showElement 函数,使其更加通用,以便在隐藏和显示正确的选项卡内容时减少代码重复。

唯一需要注意的是getElementsByClassName() 在 IE8 或更低版本中不可用。 Other (modern) browsers 具有此功能,但还有其他选择 - 请参阅 getElementsByClassName & IE8: Object doesn't support this property or method

【讨论】:

  • 非常感谢安迪!这看起来很棒!
【解决方案2】:

您必须首先为所有标签内容设置display: none

e。 G。

<script type="text/javascript">
function showTab(selected, total)
{
  for(i = 1; i <= total; i += 1)
  {
    document.getElementById('tabs-' + i).style.display = 'none';
  }

  document.getElementById('tabs-' + selected).style.display = 'block';
}
</script>

<div id="tabs-1" style="display: none">tab1</div>
<div id="tabs-2" style="display: none">tab2</div>
<div id="tabs-3" style="display: none">tab3</div>

<ul class="side bar tabs">
  <li id = "tabs1" onclick = "showTab(1,3)">City</li>
  <li id = "tabs2" onclick = "showTab(2,3)">Country</li>
  <li id = "tabs3" onclick = "showTab(3,3)">Humanity</li>  
</ul>

如果您的代码存在类似情况,我相信它会起作用。顺便说一句,检查您的控制台窗口是否有 JavaScript 错误。

【讨论】:

  • 这些是 Tab 标题,对于标签内容我已经完成了。
【解决方案3】:

你可以试试这个

 function showStuff(id){
$('#tabs1').empty();
  $('#tab2').show();
}

或者其他方式

【讨论】:

  • 我不认为 OP 正在寻找 jQuery 解决方案。
【解决方案4】:

我认为应该这样做:

<ul class="side bar tabs">
    <li  id = "tabs1" onclick = "showStuff('tabs-1')">City</li>
    <li  id = "tabs2" onclick = "showStuff('tabs-2')">Country</li>
    <li  id = "tabs3" onclick = "showStuff('tabs-3')">Humanity</li>  
</ul>

  <script type="text/javascript">
  function showStuff (id) 
  {

        document.getElementById("tabs-1").style.display = "none";
        document.getElementById("tabs-2").style.display = "none";
        document.getElementById("tabs-3").style.display = "none";
        document.getElementById(id).style.display = "block";

  }
  </script>

  <div id="tabs-1" style="display:none">tabs 1 content</div>
  <div id="tabs-2" style="display:none">tabs 2 content</div>
  <div id="tabs-3" style="display:none">tabs 3 content</div>

【讨论】:

    【解决方案5】:
    <script>
    $(function() {
    $( "#tabs" ).tabs();
    });
    </script>
    
    <div id="tabs">
     <ul>
      <li><a href="#tabs-1">City</a></li>
      <li><a href="#tabs-2">Country</a></li>
      <li><a href="#tabs-3">Humanity</a></li>
     </ul>
     <div id="tabs-1">..............</div>
     <div id="tabs-2">..............</div>
     <div id="tabs-3">..............</div>
    </div>
    

    【讨论】:

    • 不,使用 jQuery 和 jQueryUI 不一定是最佳选择。它有大量 JavaScript 代码的开销。
    • @andyb :同意,删除该行。谢谢。
    • 我不认为 OP 正在寻找 jQuery 解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多