• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アコーディオンメニューが他にも影響してしまう)

アコーディオンメニューの他の要素にも影響を与える問題

このQ&Aのポイント
  • アコーディオンメニューを作成中に、他の要素にも影響を与えてしまう問題が発生しました。
  • jQueryデザイン入門を参考にしてアコーディオンメニューを作成していますが、他のdd, dt要素も隠れたり現れたりしてしまいます。
  • 他の要素に影響を与えないようにするためには、適切なセレクタを使用してアコーディオンメニューの範囲を限定する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.2

JSファイルのキャッシュでなくてそうなる場合の可能性としましては、 ギャラリーが<div class="accordion">の中に入ってしまっている場合が考えられます。 アコーディオンの中にギャラリーを含めたい場合は、 <div class="accordion">の直接の子要素(dl)の子要素(dd)にだけ適用されるように、 下記のように記述すれば直ると思います。 $(function(){ $("div.accordion > dl > dd:not(:first)").css("display","none"); $("div.accordion > dl > dt:first").addClass("selected"); $("div.accordion > dl > dt").click(function(){ if($("+dd",this).css("display")=="none"){ $("div.accordion > dl > dd").slideUp("slow"); $("+dd",this).slideDown("slow"); $("div.accordion > dl > dt").removeClass("selected"); $(this).addClass("selected"); } }).mouseover(function(){ $(this).addClass("over"); }).mouseout(function(){ $(this).removeClass("over"); }); }); ただし、他にも<div class="accordion">内に直接dl要素を使う可能性がある場合は、 <div class="accordion">をやめて、 アコーディオンを効かせたいdl要素に<dl class="accordion">と書いたほうが確実です。 divのクラス名をそのままにしてdlはhogeというクラス名をつけた場合は、 下記のdl.accordionをdl.hogeに置換すればOKです。 $(function(){ $("dl.accordion > dd:not(:first)").css("display","none"); $("dl.accordion > dt:first").addClass("selected"); $("dl.accordion > dt").click(function(){ if($("+dd",this).css("display")=="none"){ $("dl.accordion > dd").slideUp("slow"); $("+dd",this).slideDown("slow"); $("dl.accordion > dt").removeClass("selected"); $(this).addClass("selected"); } }).mouseover(function(){ $(this).addClass("over"); }).mouseout(function(){ $(this).removeClass("over"); }); });

noname#172293
質問者

お礼

再度ありがとうございました! dlの方にclassを付ける方がいいとのご指摘通りにしたら上手くいきました! 本当にどうもありがとうございました(^O^) 感謝!

その他の回答 (1)

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

こんな感じでいかがでしょうか。 $(function(){ $("div.accordion dd:not(:first)").css("display","none"); $("div.accordion dt:first").addClass("selected"); $("div.accordion dl dt").click(function(){ if($("+dd",this).css("display")=="none"){ $("div.accordion dd").slideUp("slow"); $("+dd",this).slideDown("slow"); $("div.accordion dt").removeClass("selected"); $(this).addClass("selected"); } }).mouseover(function(){ $(this).addClass("over"); }).mouseout(function(){ $(this).removeClass("over"); }); });

noname#172293
質問者

お礼

返信が遅くなりまして大変申し訳ございません、 試してみたのですが、やはりアコーディオンは正常に開閉するのですが、 同じページに置いているWPのギャラリーの画像につけたキャプション(この例の場合「てすと1」などの部分)が最初読み込んだ時は「てすと1」のキャプションが見えている状態で、 アコーディオンの方をクリックしているとどの画像のキャプションも見えない状態になってしまいます… ちなみにギャラリーの方はこんな感じです <div id='gallery-1' class='gallery galleryid-52 gallery-columns-3 gallery-size-thumbnail'> <dl class='gallery-item'> <dt class='gallery-icon'> <a href='#' title='untitled'> <img width="150" height="150" src="hoge.jpg" class="attachment-thumbnail" alt="テスト1" title="untitled" /></a> </dt> <dd class='wp-caption-text gallery-caption'> テスト1 </dd></dl> <dl class='gallery-item'> <dt class='gallery-icon'> <a href='#' title='untitled'> <img width="150" height="150" src="hoge.jpg" class="attachment-thumbnail" alt="てすと2" title="untitled" /></a> </dt> <dd class='wp-caption-text gallery-caption'> テスト2 </dd></dl> <dl class='gallery-item'> <dt class='gallery-icon'> <a href='#' title='untitled'> <img width="150" height="150" src="hoge.jpg" class="attachment-thumbnail" alt="てすと2" title="untitled" /></a> </dt> <dd class='wp-caption-text gallery-caption'> テスト3 </dd></dl> </div>

関連するQ&A