【问题标题】:jQuery onclick show / hide multiple divsjQuery onclick 显示/隐藏多个 div
【发布时间】:2015-10-07 23:37:52
【问题描述】:

我正在尝试学习一些 jQuery,但显然我没有从我的最后一个问题和我得到的答案中学到任何东西,因为我不知道如何做以下事情:

https://jsfiddle.net/9eofcw7w/

是的,它可以工作,但是这样的代码只是草率而且不专业:

$('#tab1').click(function () {
$('#tab2show').hide();
$('#tab3show').hide();
$('#tab4show').hide();
$('#tab5show').hide();

$('#tab1show').show();
});

我将如何只用几行 jQuery 而不是我现在拥有的东西来制作上面的代码?

【问题讨论】:

标签: jquery html onclick hide show


【解决方案1】:

您的代码的问题是您为每个元素重复相同的代码块,而不是您可以使用一些通用属性来减少单独的处理程序,例如

首先我们为所有标签元素添加一个公共类,如tab,然后为所有内容元素添加另一个类tab-content,这将有助于我们轻松选择这些元素。

那么我们要找的逻辑是,我们只需要显示id与点击的标签匹配的content(内容的id是<clicked tab id> + 'show')。

现在我们可以有一个单击处理程序,它将针对所有 tab 元素,在其中我们将其 id 与 'show' 连接以查找要显示的内容并通过 .show() 显示它,然后我们隐藏所有其他tab-content 元素。

另外请注意,我们可以为tab-content 缓存jQuery 对象以供以后使用。

var $contents = $('.tab-content');
$contents.slice(1).hide();
$('.tab').click(function() {
  var $target = $('#' + this.id + 'show').show();
  $contents.not($target).hide();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="tab1" class="tab">Test 1</div>
<div id="tab2" class="tab">Test 2</div>
<div id="tab3" class="tab">Test 3</div>
<div id="tab4" class="tab">Test 4</div>
<div id="tab5" class="tab">Test 5</div>

<br />
<br />

<div id="tab1show" class="tab-content">
  test 1 default = show
</div>

<div id="tab2show" class="tab-content">
  test 2
</div>

<div id="tab3show" class="tab-content">
  test 3
</div>

<div id="tab4show" class="tab-content">
  test 4
</div>

<div id="tab5show" class="tab-content">
  test 5
</div>

【讨论】:

  • 感谢您的解释。虽然我知道重复代码不好(这基本上就是我在这里问这个问题的原因),但最好还是阅读解释而不是仅仅看一些代码。谢谢你,我又学到了一些新东西:)
  • 你的功能不会阻止默认我在这里发布一个 js 代码
【解决方案2】:

这是您可以采取的一种方法:

首先在您单击的 div 上添加一个包装 div。这将使添加事件处理程序更容易:

<div id="clicks">
    <div id="tab1">Test 1</div>
    <div id="tab2">Test 2</div>
    <div id="tab3">Test 3</div>
    <div id="tab4">Test 4</div>
    <div id="tab5">Test 5</div>
</div>

然后用另一个 div 包装所有显示/隐藏的 div。这将更容易显示/隐藏所有 div:

<div id="tabShows">
    <div id="tab1show">test 1 default = show</div>
    <div id="tab2show">test 2</div>
    <div id="tab3show">test 3</div>
    <div id="tab4show">test 4</div>
    <div id="tab5show">test 5</div>
</div>

然后使用这个事件处理程序:

// when user click on any div inside div 'clicks'
$('#clicks').on('click', 'div', function(event){

    // Get the id of a div that was clicked, e.g. tab1
    var tabId = $(this).attr('id');

    // Hide all divs inside div 'tabShows'
    $('#tabShows div').hide();

    // Show only div that was clicked, e.g. tab1show
    $('#' + tabId + 'show').show();
});

这里是更新jsFiddle的链接

【讨论】:

    【解决方案3】:
    <div id="tab1" class="ta">Test 1</div>
    <div id="tab2" class="ta">Test 2</div>
    <div id="tab3" class="ta">Test 3</div>
    <div id="tab4" class="ta">Test 4</div>
    <div id="tab5" class="ta">Test 5</div>
    
    <br /><br />
    
    <div id="tab1show" class="tab">
        test 1 default = show
    </div>
    
    <div id="tab2show" class="tab">
        test 2
    </div>
    
    <div id="tab3show" class="tab">
        test 3
    </div>
    
    <div id="tab4show" class="tab">
        test 4
    </div>
    
    <div id="tab5show" class="tab">
        test 5
    </div>
    
     $('#tab2show').hide();
     $('#tab3show').hide();
     $('#tab4show').hide();
     $('#tab5show').hide();
    
    $('.ta').click(function () {
        $('.tab').hide();
        $("#"+$(this).attr("id")+"show").show();
    });
    

    JSFiddle

    【讨论】:

      【解决方案4】:

      对于所有上述答案,页面重新加载发生在我使用这些答案时,因此请使用上述已接受答案的 jquery 代码来防止默认和页面加载

      <script>
      var $contents = $('.tab-content');
      $contents.slice(1).hide();
      $('.tab').click(function (event, ui) {
          var $target = $('#' + this.id + 'show').show();
          $contents.not($target).hide();
          event.preventDefault();
          return false;  
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        相关资源
        最近更新 更多