jQueryを使って別ページのアコーディオン(もどき)を開く
新着情報をホームに出し、クリックしたらお知らせ一覧ページの該当箇所へスクロール+内容がアコーディオンのように開く…という要望をいただいたので書いてみました。
操作する側のHTML
<a href="/test/?entry=entry9">entry9を開く</a>| <a href="/test/?entry=entry10">entry10を開く</a>| <a href="/test/?entry=entry11">entry11を開く</a>
共通jQuery
$(function() { var enrtyurl = $(location).attr('href'); setTimeout(function() { if(enrtyurl.indexOf("/?entry=") != -1) { var enrtyid = enrtyurl.split("?entry="); if(enrtyid) { $('#' + enrtyid[1]).slideDown(500); } } if(enrtyid) { var $target = $('#' + enrtyid[1]); if($target.length) { var pos = $target.offset().top; $("html, body").animate({scrollTop:pos}, 850); } } },100); });
操作される側のHTML
<ul> <li> <a href="?entry=entry9">entry9</a> <div class="content" id="entry9">entry9の内容</div> </li> <li> <a href="?entry=entry10">entry10</a> <div class="content" id="entry10">entry10の内容</div> </li> <li> <a href="?entry=entry11">entry11</a> <div class="content" id="entry11">entry11</div> </li> </ul>
操作される側のCSS
.content { display: none; }
操作される側のjQuery(共通jQueryに足して)
$(function() { $('a[href*="?entry="]').click(function() { var enrtyurl = $(this).attr("href"); var enrtyid = enrtyurl.split("?entry="); $('.content').slideUp(500); if($('#' + enrtyid[1]).css('display') == 'block') { $('#' + enrtyid[1]).slideUp(500); } else { $('#' + enrtyid[1]).slideDown(500); } return false; }); });