jQuery: タブパネルの作り方
jQueryでタブパネルを作ります。
上に表示されているタブをクリックすると、下のコンテンツが切り替わる仕様です。
動作サンプル、サンプルコード、コード解説の順番で記述しています。
動作サンプル
html
<div id="tp_all">
<ul id="tp_tab">
<li><a href="#tabA" class="selected">タブA</a></li>
<li><a href="#tabB">タブB</a></li>
<li><a href="#tabC">タブC</a></li>
</ul>
<ul id="tp_panel">
<li id="tabA">
Aの文章<br>
Aの文章。Aの文章。Aの文章。Aの文章。Aの文章。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。
文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
</li>
<li id="tabB">
Bの文章<br>
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。
文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
</li>
<li id="tabC">
Cの文章<br>
Cの文章。Cの文章。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。
文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
</li>
</ul>
</div>
CSS
ul {
padding: 0px;
}
li {
list-style-type: none;
}
#tp_all {
width: 450px;
}
/* タブ部分 */
ul#tp_tab li {
width: 150px;
height: 35px;
float: left;
}
ul#tp_tab li a {
display: block;
color: black;
font-weight: bold;
background: linear-gradient(to bottom, #ebebeb 45%,#d8d8d8 55%);
line-height: 35px;
text-align: center;
text-decoration: none;
border: solid 1px silver;
}
/* 選択されたタブ */
ul#tp_tab li a.selected {
background: white;
}
/* パネル部分 */
ul#tp_panel {
clear: both;
border: solid 1px gray;
padding: 0px;
}
ul#tp_panel li{
padding: 5px;
}
JavaScript
$(document).ready(function(){
// 最初のパネル以外は隠す
$('ul#tp_panel li:not(:first)').hide();
$('ul#tp_tab li a').on('click', function(){
// クラス属性の削除と追加
$('ul#tp_tab li a').removeClass('selected');
$(this).addClass('selected');
// パネルのhide()とshow()
$('ul#tp_panel li').hide();
var id = $(this).attr('href');
$(id).show();
return false;
});
});
コード解説
htmlの構造
<div id="tp_all">
<ul id="tp_tab">
<li><a href="#tabA" class="selected">タブA</a></li>
<li><a href="#tabB">タブB</a></li>
<li><a href="#tabC">タブC</a></li>
</ul>
<ul id="tp_panel">
<li id="tabA">Aのコンテンツ</li>
<li id="tabB">Bのコンテンツ</li>
<li id="tabC">Cのコンテンツ</li>
</ul>
</div>
htmlでは、タブ部分とパネル部分を別々にして、ID属性で結びつけています。 そして、読み込み時には先頭のパネルのみを表示し、他のパネルは非表示とします。
クラス属性の削除と追加
// クラス属性の削除と追加
$('ul#tp_tab li a').removeClass('selected');
$(this).addClass('selected');
removeClass()でクラスを削除し、addClass()でクリックされた要素のみにクラスを追加します。
パネルの表示・非表示
// パネルのhide()とshow()
$('ul#tp_panel li').hide();
var id = $(this).attr('href');
$(id).show();
1行目で全てのパネルを非表示にします。 2行目はクリックされた要素のhref属性(つまりID値)を取得。 3行目でパネルを表示します。