$(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で質問しましょう!
似たような質問が見つかりました
- HTML・CSS HTMLのdlとul どちらが正しいと思いますか 3 2023/02/23 11:20
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- 数学 dl と 、 Δl はどのように違いますか? 2 2022/11/30 15:48
- Access(アクセス) Accessのデータ型の日付/時刻型について 1 2023/04/02 17:03
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アコーディオンメニューをブラ...
-
階層別の組織図の自動作成について
-
SQLのmaxで求めた値を変数に代...
-
jQueryで、複数条件の絞り込み機能
-
Jquery で on/offボタンの実装...
-
IndexedDB を使ってファイルア...
-
Selenium Basicの件
-
JavaScriptでtabindexの変更っ...
-
PHPで動的に生成されるcsvの、...
-
FullCalendar の複数月表示につ...
-
JavascriptからPHPへのAjax通信...
-
一定時間ごとに表示内容を切り...
-
jQueryを使いformでsubmitした...
-
Ajaxを使った検索サイト作成
-
jQueryを複数設置した場合の優...
-
jQuery3 reset()が効かない。
-
Javascriptを使ってQRコード読...
-
JQueryでAjax通信をキャンセル...
-
読み込み開始から読み込み終了...
-
カンマ区切りのデータを配列に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
階層別の組織図の自動作成について
-
jQueryのアコーディオン一番目...
-
jquery.validationEngine.js 添...
-
アコーディオンメニューが他に...
-
絞り込み検索の後にソートを追...
-
アコーディオンメニューをブラ...
-
jquery-1.3.2⇒○ 1.6.4.⇒エラー
-
【JQuery】iframeのリンク先変...
-
Selenium4でボタンをクリックで...
-
Javascriptを使ってQRコード読...
-
JavascriptからPHPへのAjax通信...
-
IndexedDB を使ってファイルア...
-
同一ページ移動時ハンバーガー...
-
JavaScriptでtabindexの変更っ...
-
jQueryを使いformでsubmitした...
-
SQLのmaxで求めた値を変数に代...
-
カンマ区切りのデータを配列に...
-
インラインフレームを自動更新...
-
ドラッグ & ドロップでのド...
-
jQuery toggle() 戻るで開いた...
おすすめ情報