jQuery onclick 显示/隐藏多个div

jQuery onclick show / hide multiple divs

我正在尝试学习一些东西 jQuery,但显然我没有从上一个问题和得到的答案中学到任何东西,因为我无法弄清楚如何执行以下操作:

https://jsfiddle.net/9eofcw7w/

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

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

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

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

您可以采用以下一种方法:

首先在您单击的 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。这将使显示/隐藏所有 divs:

变得更容易
<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();
});

这里是 link 更新 jsFiddle

<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

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

首先我们向所有选项卡元素添加一个公共 class,如 tab,然后将另一个 class tab-content 添加到所有内容元素,这将有所帮助我们很容易 select 这些元素。

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

现在我们可以有一个单击处理程序,它将以所有 tab 元素为目标,在其中我们将其 id 与 'show' 连接起来以查找要显示的内容并通过 [= 显示它18=] 然后我们隐藏所有其他 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>

对于上述所有答案,我在使用这些答案时会重新加载页面,因此请使用上述已接受答案的 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;  
});