【jQuery】1ページ内に複数のタブ切り替え

1ページ内に複数「タブ切り替え」が発生した際のjQueryの処理です。
切り替えのタイミングが個別にバラバラな「タブ切り替え」が複数表示可能です。

複数「タブ切り替え」があるページ

複数「タブ切り替え」があるページ

HTML

<h1>複数「タブ切り替え」があるページ</h1>
<section>
	<h2>タブ切り替え1</h2>
	<ul class="tab">
		<li>タブA</li>
		<li>タブB</li>
		<li>タブC</li>
	</ul>
	<div class="contents">
		<div class="content">
			「タブA」の表示内容
		</div>
		<div class="content">
			「タブB」の表示内容
		</div>
		<div class="content">
			「タブC」の表示内容
		</div>
	</div>
</section>
<section>
	<h2>タブ切り替え2</h2>
	<ul class="tab">
		<li>タブD</li>
		<li>タブE</li>
		<li>タブF</li>
	</ul>
	<div class="contents">
		<div class="content">
			「タブD」の表示内容
		</div>
		<div class="content">
			「タブE」の表示内容
		</div>
		<div class="content">
			「タブF」の表示内容
		</div>
	</div>
</section>

CSS

.tab {
	width: 100%;
	margin: 0 0 -2px;
	padding: 0;
	display: table;
	table-layout: fixed;
}
.tab li {
	width: 33%;
	margin: 0;
	padding: 5px 10px 0;
	cursor: pointer;
	display: table-cell;
	vertical-align: middle;
	text-align: center;
	background: #666;
	border: 1px solid #333;
	box-sizing: border-box;
}
.tab li.current {
	width: 34%;
	background: #fff;
	border-bottom: none;
}
.content {
	margin: 0;
	padding: 16px;
	border: 1px solid #333;
	border-top: none;
	text-align: center;
}
.contents .content {
	display: none;
}
.contents .content:nth-child(1) {
	display: block;
}

jQuery

$(function() {
	$('.tab li:nth-child(1)').addClass('current');
	$('.tab li').click(function() {
		var num = $(this).parent().children('li').index(this);
		$(this).parent('.tab').each(function(){
			$('>li',this).removeClass('current').eq(num).addClass('current');
		});
		$(this).parent().next().children('.content').hide().eq(num).show();
	}).first().click();
});

以上で、以下の様に切り替えのタイミングがバラバラになります。

タブはバラバラに切り替わるようになる

タブはバラバラに切り替わるようになる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください