ページ内リンクしたマークアップでページ分割する

「section」ごとにページを分割します。
それぞれにidを割り振り、そのidに飛ぶように「nav」にはリンクを付けます。
普通のページ内リンクですね。

html

 
	<ul class="nav">
		<li><a href="#c1">1</a></li>
		<li><a href="#c2">2</a></li>
		<li><a href="#c3">3</a></li>
		<li><a href="#c4">4</a></li>
	</ul>

	<div id="c1" class="section">
		<h2>SECTION 01</h2>
		<p>
			長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。
		</p>
	</div>
	<div id="c2" class="section">
		<h2>SECTION 02</h2>
		<p>
			そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。
		</p>
	</div>
	<div id="c3" class="section">
		<h2>SECTION 03</h2>
		<p>
			長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。
		</p>
	</div>
	<div id="c4" class="section">
		<h2>SECTION 04</h2>
		<p>
			そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。
		</p>
	</div>
	

jQueryの部分です。
読み込まれたら最初の「section」だけ表示している状態にします。
ボタンがクリックされたら表示されている「section」を非表示にして、クリックされた「section」を表示してるだけですね。

javascript

 
	$(function() {
		var pages = $('.section');
		//sectionを全て非表示
		pages.hide();
		//最初のsectionを表示
		pages.eq(0).fadeIn();

		$('.nav a').click(function(event){
			event.preventDefault();
			var nextPage = this.hash;
			pages.hide();
			$(nextPage).fadeIn();
	    });
	});
	

ナビゲーションを自動で作成する

せっかくjQueryを使用しているので次は最低限のマークアップでナビゲーションなどは自動で作成してみます。

html

	<div class="section">
		<h2>SECTION 01</h2>
		<p>
			長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。
		</p>
	</div>
	<div class="section">
		<h2>SECTION 02</h2>
		<p>
			そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。
		</p>
	</div>
	<div class="section">
		<h2>SECTION 03</h2>
		<p>
			長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。
		</p>
	</div>
	<div class="section">
		<h2>SECTION 04</h2>
		<p>
			そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。
		</p>
	</div>
	

今度はidも割り当ててないので、まずはidを割り当てて「section」の数だけナビゲーションリストを作成します。

javascript

	$(function() {
		var pages = $('.section');
		pages.hide();
		//最初のsectionを表示
		pages.eq(0).fadeIn();
		//ナビゲーション
		pages.parent().prepend('<ul class="nav"></ul>');
		pages.each(function (i) {
			//ナビゲーションリスト追加
			$('.nav').append('<li><a href="#c'+( i+1 )+'">'+( i+1 )+'</a></li>');
			//連番idの追加
			$(this).attr('id', 'c'+(i+1));
		});
		$('.nav a').click(function(event){
			event.preventDefault();
			var nextPage = this.hash;
			pages.hide();
			$(nextPage).fadeIn();
	    });
	});
	

ちなみにクリックしたa要素の「#」を取得は「this.hash」じゃなくて「$(this).attr(‘href’)」でもよさそうですが、appendで追加した要素だとieの場合はフルパスになってしまうようです。

指定要素を最初に開く

今までのサンプルは最初の要素がはじめに開きますが、他ページから「index.html#c2」というリンクにして最初に指定要素を開きたい場合があります。
5行目の「pages.eq(0).fadeIn();」を削除して、14行目のクリックイベントの前に以下を追加します。

javascript

	//URLに#がついてたら該当しているidを開く
	if ( location.hash ) {
		$('html,body').scrollTop(0);
		$(location.hash).fadeIn();
	} else {
		pages.eq(0).fadeIn();
	}