jQueryで下記のような開閉式のリストを作っています。
初期は5件だけ表示して、「もっと見る」ボタンで全件表示し、「閉じる」で初期状態に戻すようにしています。
boxが1個だけなら問題なかったのですが、複数設置した場合、思い通りの動作になりません。
追記: 初期状態で5件以下の場合、「もっと見る」ボタンを非表示にしたいです。
html
1<div class="box"> 2 <ul class="list"> 3 <li>1件目の記事</li> 4 <li>2件目の記事</li> 5 <li>3件目の記事</li> 6 <li>4件目の記事</li> 7 <li>5件目の記事</li> 8 <li>6件目の記事</li> 9 <li>7件目の記事</li> 10 <li>8件目の記事</li> 11 <li>9件目の記事</li> 12 <li>10件目の記事</li> 13 </ul> 14 <div class="btn"> 15 <span class="txt-more">もっと見る</span> 16 <span class="txt-close">閉じる</span> 17 </div> 18 </div> 19<div class="box"> 20 <ul class="list"> 21 <li>1件目の記事</li> 22 <li>2件目の記事</li> 23 <li>3件目の記事</li> 24 <li>4件目の記事</li> 25 <li>5件目の記事</li> 26 <li>6件目の記事</li> 27 <li>7件目の記事</li> 28 <li>8件目の記事</li> 29 <li>9件目の記事</li> 30 <li>10件目の記事</li> 31 </ul> 32 <div class="btn"> 33 <span class="txt-more">もっと見る</span> 34 <span class="txt-close">閉じる</span> 35 </div> 36 </div>
Javascript
1$(function() { 2 var total_list = $(".list li").length; 3 if (total_list > 5) { 4 $(".list li:gt(4)").addClass("is-hide"); 5 } 6 $(".btn").click(function() { 7 if ($(this).hasClass("is-open")) { 8 $(".list li:gt(4)").addClass("is-hide"); 9 $(this).removeClass("is-open"); 10 } else { 11 $(".list li.is-hide").removeClass("is-hide"); 12 $(this).addClass("is-open"); 13 } 14 }); 15});
CSS
1 .is-hide {display: none;} 2 .txt-close {display: none;} 3 .is-open .txt-more {display: none;} 4 .is-open .txt-close {display: block;}
色々検索してみて、eachを使えばいいというのがわかったのですが、Javascriptの基本がわかっていないため、どのように記述していいかわかりません。ご教授いただければ幸いです。
よろしくお願いいたします。
こちらの記事を参照しました。書き方がわからず、試し方もわからなかったため、質問させていただきました。
http://www.tsunagu-tsunagaru.com/entry/jQuery-%E8%A4%87%E6%95%B0%E3%81%AE%E5%90%8C%E4%B8%80%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E6%8C%81%E3%81%A4%E8%A6%81%E7%B4%A0%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%86
回答1件
あなたの回答
tips
プレビュー