いつもお世話になっております。
前提・実現したいこと
例えば以下のjQueryのコードがありこれをfor文で簡潔に記述したく思っております。
どのような記述が効率がよいのかわかりませのでご教授いただければ幸いです。
よろしくお願いいたします。
html
1<body> 2 <div class="js-btn1">btn1</div> 3 <div class="js-child1">panel1</div> 4 5 <div class="js-btn2">btn2</div> 6 <div class="js-child2">panel2</div> 7 8 <div class="js-btn3">btn3</div> 9 <div class="js-child3">pane3</div> 10 11 <div class="js-btn4">btn4</div> 12 <div class="js-child4">panel4</div> 13 14</body>
該当のソースコード
$(document).ready(function(){ $('.js-btn1').click(function(){ $(this).next('.js-child1').slideToggle('fast'); }) $('.js-btn2').click(function(){ $(this).next('.js-child2').slideToggle('fast'); }) $('.js-btn3').click(function(){ $(this).next('.js-child3').slideToggle('fast'); }) $('.js-btn4').click(function(){ $(this).next('.js-child4').slideToggle('fast'); }) });
こちらで試してみたコードは以下になります。
$(document).ready(function(){ for (var i = 0; i < 5; i++) { $('.js-btn'+i).click(function(){ $(this).next('.js-child'+i).slideToggle('fast'); }); } });
$('.js-btn'+i)や('.js-child'+i)などは正しい記述になりますでしょうか。
初歩的なご質問になり恐縮ですが、よろしくお願い申し上げます。
コードはマークダウンのcode機能を利用してご提示ください。
また、ご自身が試したコードをご提示ください。
ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
提示のコードで何か問題が出ているのでしょうか?
想定通り動くか別として、0始まりであること以外はforとしては無駄がないように思いますが。
JavaScriptとはいっても基本はhtmlあってのものなので、これ以上となるとhtmlも提示いただかないと難しいのでは。html修正可能かどうかも含めて追記してください
ご教授ありがとうございます。
それぞれ個別にtoggleを指定したコードでは意図した動きになるのですが、
for文を利用したコードではpanelが動かず意図した動きになりませんでした。
$('.js-btn'+i)や('.js-child'+i)の記述がまちがっているような見解(quotationが囲む必要がある)なのですが、どのような記述であれば解決するのか知りたくお願いいたします。
ちなみにceftweb様に回答いただいた方法が一番わかりやすく簡潔なことは理解しましたが
for文を使っての記述方法をご教示いただけますと幸いです。
勉強中の身で初歩的なことかもしれませんがどうぞよろしくお願いいたします。
それはつまりfor文の練習がしたいという理解でよろしいでしょうか。
(それならあえてイベント絡ませなくてもいいような)
回答4件
あなたの回答
tips
プレビュー