クリックすると非表示の内容が開き、:beforeのアイコンも変化するアコーディオンを作っています。
開閉はうまくいきますが、アイコンのクラス付与が全ての項目に当たってしまうので、これを
一つだけにしたいです。
レクチャーいただけますと幸いです。
html
<dl> <div class="bg"> <dt class="news_title"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> <div class="bg"> <dt class="news_title"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> </dl>
js
$(dl dd').hide(); $('dl dt') .click(function(e){ //$('dl dd').slideUp(500); $('+dd', this).slideToggle(500); $('.news_title').toggleClass("close"); }) });
news_titleのdt::beforeでアイコン変化にcss
現状
クリックするとnews_titleすべてに closeのクラスが付与されてしまう。
<dl> <div class="bg"> <dt class="news_title"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> <div class="bg"> <dt class="news_title"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> </dl> ↓ <dl> <div class="bg"> <dt class="news_title close"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> <div class="bg"> <dt class="news_title close"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> </dl>
再現したいhtml
クリックしたら一つ目に closeし、2個目選択したら一つ目は削除され2つ目にclose付与
<dl> <div class="bg"> <dt class="news_title close"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> <div class="bg"> <dt class="news_title"> text</dt> <dd class="news_body" ><p>text</p> </dd> </div> </dl>
codepenコード
https://codepen.io/kkcol/pen/qBYVYeE
以下で希望通りの動きになりました
js
$(function(){ $('.info dl dd').hide(); $('.info dl dt').on('click',function(){ $('.info dl dt').not(this).next('dd'); $(this).toggleClass("close").next('dd').slideToggle(500); }); });
回答2件
あなたの回答
tips
プレビュー