自動連携なCollapseがほしい
プレーンjavascriptで可変表示できる要素を作成しようと思い、w3schoolsのHow TO - Collapseを手本に試行錯誤中です。
今までは対象idのdisplayを操作する関数を定義してonclick="func(id)"で呼び出すというようなことをしていましたが、手作業で一つ一つidを書くのはあまり好ましくないと思ったため、今回のようにボタンと操作先が自動で連携されるようにしようとしています。
目標は操作元・操作先のn番目の要素がidなどを用いずに(htmlのコード量を抑えて)連携されることです。
該当のソースコード
html
1<article> 2 <p><a class="hidden3">aaaa</a></p> 3 <div class="hidden3in">いぇい</div> 4 <p><a class="hidden3">aaaa</a></p> 5 <div class="hidden3in">いぇい</div> 6 <p><a class="hidden3">aaaa</a></p> 7 <div class="hidden3in">いぇい</div> 8</article>
javascript
1document.addEventListener('DOMContentLoaded', function() { 2 var colla = document.getElementsByClassName("hidden3"); 3 var collb = document.getElementsByClassName("hidden3in"); 4 for (var i=0; i<collb.length; i++) { 5 collb[i].style.display = "none"; 6 colla[i].addEventListener('click', function(){ 7 collb[i].style.display = (collb[i].style.display=='block')?'none':'block'; 8 }); 9 }; 10});
補足
要素がちゃんと非表示になっているためcollb[i].style.display = "none";までは機能しているようですが、肝心のclickイベントの追加でコケている感じです。
w3schoolsのほうではthis.nextElementSiblingを使っていますが、私の用途では操作対象の要素が直後に来ない場合が多々あり、それ故に今までidで操作先を明記せざるを得ませんでした。
.aクラスの3番目の要素で.bクラスの4番目の要素を操作するようなことはありません。ひとつの<p></p>にそれぞれが1つずつ入る感じですのでfor文で書きました。
当方js初心者ですので何卒よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/05 10:21