プログラミング

jQueryでタブの切り替えを実装するシンプルな方法

次のような、タブメニューをクリックしたら表示内容も切り替わるようなものをjQueryで実装する方法を紹介したいと思います。

See the Pen
jquery-tab
by KUBO (@KUBOGEN)
on CodePen.

HTML

まずタブメニューと表示させるコンテンツを用意します。

HTML
<ul class=”tab-list”>
 <li class=”tab-item active”>タブ1</li>
 <li class=”tab-item”>タブ2</li>
 <li class=”tab-item”>タブ3</li>
</ul>
<ul class=”content-list”>
 <li class=”content-item show”>コンテンツ1</li>
 <li class=”content-item”>コンテンツ2</li>
 <li class=”content-item”>コンテンツ3</li>
</ul>

最初に表示させておくタブとコンテンツには、それぞれ「active」「show」のクラスをつけています。

CSS

CSS
.tab-list {
 display: flex;
}
.tab-item {
 background: #ccc;
 padding: 10px 25px;
}
.tab-item.active {
 background: #eee;
}
.tab-item:hover {
 cursor: pointer;
}
.content-item {
 background: #eee;
 padding: 20px;
 display: none
}
.content-item.show {
 display: block;
}

次にCSS。デザインに関しては好きなようにしていただき、ポイントとしては、コンテンツを「display:none;」で非表示にし、「show」のクラス名がついているコンテンツは「display:block;」で表示させていること。

jQuery

jQuery
$(function() {
 $(‘.tab-item’).click(function() {
  var index = $(‘.tab-item’).index(this);
  $(‘.active’).removeClass(‘active’);
  $(this).addClass(‘active’);
  $(‘.content-item’).removeClass(‘show’).eq(index).addClass(‘show’);
 });
});

最後にjQuery。ここでタブの切り替えを実装していきます。

$(‘.tab-item’).click(function() {
 クリックしたら行う処理
});

タブ(.tab-item)をクリックしたら処理を行います。

var index = $(‘.tab-item’).index(this);

まず、変数indexにクリックしたタブの順番を入れておきます。indexの引数としてthisを入れておくことで、クリックした要素の順番を取得することができます。

$(‘.active’).removeClass(‘active’);

activeクラスがついたタブから一旦activeクラスを取ります。

$(this).addClass(‘active’);

そして、クリックされたタブにactiveクラスを付与。

$(‘.content-item’).removeClass(‘show’).eq(index).addClass(‘show’);

activeクラスの時と同様、表示されているコンテンツから一旦showクラスを取ります。

そして、クリックされたタブと同じ順番のコンテンツにshowクラスをつけます。このときに使うのが最初に宣言した変数indexです。

eqの引数に変数indexを指定することで、クリックされたタブと同じ順番のコンテンツにshowクラスをつけて表示することができます。

まとめ

タブがクリックされたら以下の処理を行うことで、切り替えをしています。

①クリックされたタブの順番を変数に入れる
②タブのactiveクラスを外す
③クリックされたタブにactiveクラスをつける(クリック時のデザインを適用)
④コンテンツのshowクラスを一旦外し、①の変数を利用してクリックされたタブと同じ順番のコンテンツにshowクラスをつける

行われている処理はたったこれだけなので、わりと簡単です。

See the Pen
jquery-tab
by KUBO (@KUBOGEN)
on CodePen.

Leave a Comment