タブ切り換え

/* HTML <div class="tab"> <ul class="tab-menu"> <li class="selected"><a href="#" data-tabid="1">XXX</a></li> <li><a href="#" data-tabid="2">XXX</a></li> <li><a href="#" data-tabid="3">XXX</a></li> </ul><!-- /.tab-menu --> <div class="tab-contents"> <div data-contentid="1"> <p>XXXXXXXXXXXXX</p> </div> <div class="hidden" data-contentid="2"> <p>XXXXXXXXXXXXX</p> </div> <div class="hidden" data-contentid="3"> <p>XXXXXXXXXXXXX</p> </div> </div> </div><!-- /.tab --> */ /* CSS .tab-menu { border-bottom: 6px solid #b9d5dc; } .tab-menu > li { float: left; } .tab-contents .hidden { display: none; } */ $(function(){ /* デリゲート:イベントハンドラをイベント発生要素の「親要素」に設定する機能 ・追加時に新たな要素にイベントハンドラを設定しなくて済む ・メモリの節約 → イベントハンドラは1つ設定するごとにメモリを消費する */ $('.tab-menu').on('click', 'li > a', function(event) { // デリゲート無しの場合 $('.tab-menu li > a').on('click', function(event) { event.preventDefault(); // クリックでページ最上部へ移動しないよう、<a>のデフォルト挙動を抑制 var $this = $(this); // クリックした<a>を取得 // ボタンのアピアランス(外観)を変更する $this.parent().siblings() // 兄弟要素を全て返す → liを取得 .removeClass('selected') // 要素からクラス(.selected)を削除 .end() // 直前のトラバースをキャンセルして、ひとつ前の状態に戻す $this.parent().siblings() → $this.parent() .addClass('selected'); // 要素にクラスを追加 // コンテンツを切り換える var tabid = $this.data('tabid'); // クリックされた<a>のdata-tabid属性の値を代入 // closest:開始要素から最も近い親要素を取得。引数にセレクタ指定で、マッチする最も近い親要素を返す // children:直接の子要素のみを取得 $this.closest('.tab').find('.tab-contents').children() .each(function() { // 取得している要素全てに()に記述した関数を1度だけ実行 var $content = $(this); if ($content.data('contentid') === tabid) { $content.removeClass('hidden'); } else { $content.addClass('hidden'); } }); }); });

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.