

$(function(){
$("dd:not(:first)").css("display","none");
$("dt:first").addClass("selected");
$("dl dt").click(function(){
if($("+dd",this).css("display")=="none"){
$("dd").slideUp("slow");
$("+dd",this).slideDown("slow");
$("dt").removeClass("selected");
$(this).addClass("selected");
}
}).mouseover(function(){
$(this).addClass("over");
}).mouseout(function(){
$(this).removeClass("over");
});
});
<div class="accordion">
<dl>
<dt>Step.1</dt>
<dd><p>Lorem ipsum dolorturpis suscipit pretium. Aenean ultricies scelerisque dictum. Phasellus tincidunt, nibh lacinia facilisis aliquam, lacus quam condimens.</p></dd>
<dt>Step.2</dt>
<dd><p>Integer rhoncus felis mauris. Donec massa Donec elementum arcu tortor.ec at pellentesque mi. Mauris lobortis libero ac metus ultricies accumsan. </p></dd>
<dt>Step.3</dt>
<dd><p>Integer pretium porttitor lectus at tempor. Donec nec cursus elit. sit amet turpis Praesent feugiat est eu tellus dictum ac imperdiet nisi imperdiet. </p></dd>
</dl>
</div>
「jQueryデザイン入門」という本を読みながらアコーディオンメニューを作ってみたのですが、HTML内のほかのdd,dtも隠れたり現れたりしてしまいます(^^;)
div class="accordion"のdd,dtに適用して他のdd,dtに影響しないようにするにはどのようにしたらいいのでしょうか?
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");
});
});
再度ありがとうございました!
dlの方にclassを付ける方がいいとのご指摘通りにしたら上手くいきました!
本当にどうもありがとうございました(^O^)
感謝!
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");
});
});
返信が遅くなりまして大変申し訳ございません、
試してみたのですが、やはりアコーディオンは正常に開閉するのですが、
同じページに置いている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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
スマホ上で、左右スワイプで次...
-
jsで質問です。 formをsubmitし...
-
Outlookのアカウントがあるとメ...
-
オブジェクト配列の各メンバを...
-
初心者です。gulpでコンパイル...
-
jsで、配列内の文章を改行する...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
階層別の組織図の自動作成について
-
jQueryのアコーディオン一番目...
-
jquery.validationEngine.js 添...
-
jQueryが動きません。
-
Win11 へのRufus と レジストリ...
-
JavaScriptでtabindexの変更っ...
-
Javascriptを使ってQRコード読...
-
同一ページ移動時ハンバーガー...
-
JavascriptからPHPへのAjax通信...
-
how's whether today in yufuin?
-
パソコンで動くjavascriptがス...
-
カンマ区切りのデータを配列に...
-
SQLのmaxで求めた値を変数に代...
-
スライドを最後の画像で止めたい
-
jQuery を外部ファイルから呼び...
-
[jQuery UI] sortableを使いaja...
-
jQueryのblockUIをformのボタン...
-
FullCalendar の複数月表示につ...
-
Superfishの最終項処理について
-
jQueryで外部テキストファイル...
おすすめ情報