実現したいこと
- 『もっと見る』クリックで、n件の要素を表示させる機能を同じページ内に複数設置したい
前提
jQueryを使用せず、Vanilla JSで実装したいと考えています。
発生している問題・エラーメッセージ
『もっと見る』のブロックが一つの時は動作するのですが、 2つ以上になると正しく動作させることができていません。
該当のソースコード
JavaScript
1var firstView = 10; 2var addItems = 10; 3var hidden = 'is-hidden'; 4var count = document.querySelectorAll('.item__box'); 5var target = ('.item__box--item'); 6var targets = document.querySelectorAll(target); 7var moreView = document.querySelectorAll('.item__box--more'); 8 9if (moreView) { 10 document.addEventListener('DOMContentLoaded', () => { 11 var targets_length = moreView.previousElementSibling.children.length; 12 if (targets_length > firstView) { 13 for (var i = firstView; i < targets_length; i++) { 14 targets[i].classList.add(hidden); 15 } 16 } 17 else { 18 moreView.style.display = 'none'; 19 } 20 }); 21 22 moreView.addEventListener('click', () => { 23 var hiddens = document.querySelectorAll(target + "." + hidden); 24 if (hiddens.length < addItems) { 25 addItems = hiddens.length; 26 } 27 for (var i = 0; i < addItems; i++) { 28 hiddens[i].classList.remove(hidden); 29 } 30 if (document.querySelectorAll(target + "." + hidden).length === 0) { 31 moreView.style.display = 'none'; 32 } 33 }); 34} 35
HTML
1<div class="item__box"> 2 <p class="item__box--title">List01</p> 3 <ul class="item__box--list"> 4 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs01.jpg" alt=""></a></li> 5 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs02.jpg" alt=""></a></li> 6 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs03.jpg" alt=""></a></li> 7 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs04.jpg" alt=""></a></li> 8 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs05.jpg" alt=""></a></li> 9 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs06.jpg" alt=""></a></li> 10 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs07.jpg" alt=""></a></li> 11 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs08.jpg" alt=""></a></li> 12 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs09.jpg" alt=""></a></li> 13 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs10.jpg" alt=""></a></li> 14 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs11.jpg" alt=""></a></li> 15 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs12.jpg" alt=""></a></li> 16 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs13.jpg" alt=""></a></li> 17 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs14.jpg" alt=""></a></li> 18 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs15.jpg" alt=""></a></li> 19 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs16.jpg" alt=""></a></li> 20 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs17.jpg" alt=""></a></li> 21 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs18.jpg" alt=""></a></li> 22 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs19.jpg" alt=""></a></li> 23 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs20.jpg" alt=""></a></li> 24 </ul> 25 <span class="item__box--more">View More</span> 26</div> 27 28<div class="item__box"> 29 <p class="item__box--title">List02</p> 30 <ul class="item__box--list"> 31 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs01.jpg" alt=""></a></li> 32 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs02.jpg" alt=""></a></li> 33 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs03.jpg" alt=""></a></li> 34 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs04.jpg" alt=""></a></li> 35 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs05.jpg" alt=""></a></li> 36 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs06.jpg" alt=""></a></li> 37 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs07.jpg" alt=""></a></li> 38 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs08.jpg" alt=""></a></li> 39 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs09.jpg" alt=""></a></li> 40 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs10.jpg" alt=""></a></li> 41 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs11.jpg" alt=""></a></li> 42 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs12.jpg" alt=""></a></li> 43 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs13.jpg" alt=""></a></li> 44 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs14.jpg" alt=""></a></li> 45 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs15.jpg" alt=""></a></li> 46 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs16.jpg" alt=""></a></li> 47 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs17.jpg" alt=""></a></li> 48 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs18.jpg" alt=""></a></li> 49 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs19.jpg" alt=""></a></li> 50 <li class="item__box--item"><a href="#"><img src="/assets/img/img-thumbs20.jpg" alt=""></a></li> 51 </ul> 52 <span class="item__box--more">View More</span> 53</div>
試したこと
まずは『もっと見る』のボックスがひとつの時のものを作り、
2つに増やしたところ、同じ親要素に『.item__box』を持つ『.item__box--item』ではなく、
同じページ内にある『.item__box--item』全てに対して影響を与えてしまったので、
『.item__box--more』に隣接している『.item__box--list』内の
『.item__box--item』を数えるように変更しました。
この状態だと『List01』の方は意図した挙動になったのですが、
『List02』の方が動作しないので、
『.item__box』ごとに処理をループさせたいと考えたのですが、
うまくループさせる方法がわからずに、ソースコードの状態になっています。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/17 18:34
退会済みユーザー
2023/06/17 22:18
2023/06/19 02:28
退会済みユーザー
2023/06/19 03:37