jQueryでアコーディオン(開閉)メニューを作成しています。
メニューの右端に、マークを表示していますが、開閉状態に応じて変えることはできますでしょうか?
単に変えるだけならできますが、開閉状態に応じて変えるとなると、なかなかできませんでした。
画像のように閉じているときは右端に[+]マークを表示し、開いたときは[-]マークを表示したいのです。
皆様の知恵をご教示いただけると幸いです。
以下ソースです。よろしくお願いいたします。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript" src="../js/jquery/jquery.js"></script>
<script><!--
$(document).ready(function(){
var marks = {
closedMark: '[+]',
openedMark: '[-]'
};
//開閉状態表示
$("h4.conmenu").append("<span>"+ marks.closedMark +"</span>");
//オンマウスでカーソル変更
$("h4.conmenu").hover(function(){
$(this).css("cursor","pointer");
},function(){
$(this).css("cursor","default");
});
//最初に表示するか?
$("ul.sub").css("display","none");
//クリック処理
$('h4.conmenu').click(function(){
// 開閉する速度
$(this).next().slideToggle('fast');
//マークを変える
//$(this).find("span").html(marks.openedSign);
});
});
//-->
</script>
<style type="text/css">
.leftmenu {
float: left;
width: 200px;
background: #ff0000;
list-style: none;
}
.leftmenu h4 {
padding: 0;
/*margin: 0;*/
margin: 5px 2px 5px 5px;
}
.leftmenu ul {
padding: 0;
margin: 0;
list-style-type: none;
}
.leftmenu li {
padding: 0;
margin: 0;
}
.leftmenu a,
.leftmenu a:visited {
#text-transform:uppercase;
display: block;
height: 25px;
line-height: 25px;
padding: 0 10px 0 20px;
color: #ffffff;
background: #303030;
text-decoration: none;
}
.leftmenu a:hover {
color: #000;
background-color: #acac23;
}
.leftmenu span{
float:right;
}
</style>
<title>sample</title>
</head>
<body>
<div class="wrapper">
<div class="leftmenu">
<h4 class="conmenu">Menu-1</h4>
<ul class="sub">
<li><a href="#">Menu-1a</a></li>
<li><a href="#">Menu-1b</a></li>
<li><a href="#">Menu-1c</a></li>
<li><a href="#">Menu-1d</a></li>
</ul>
<h4 class="conmenu">Menu-2</h4>
<ul class="sub">
<li><a href="#">Menu-2a</a></li>
<li><a href="#">Menu-2b</a></li>
<li><a href="#">Menu-2c</a></li>
<li><a href="#">Menu-2d</a></li>
<li><a href="#">Menu-2e</a></li>
</ul>
<h4 class="conmenu">Menu-3</h4>
<ul class="sub">
<li><a href="#">Menu-3a</a></li>
<li><a href="#">Menu-3b</a></li>
<li><a href="#">Menu-3c</a></li>
</ul>
</div>
</div>
</body>
</html>
No.1ベストアンサー
- 回答日時:
クリックの処理内容が、表示/非表示のほうはトグルになっているのに、マークの処理は一律にしているところが問題なのではないでしょうか?
+-を反転する処理にしてあげればよろしいかと。
例えば
$('h4.conmenu').click(function(){
$(this).next().slideToggle('fast');
var s = $(this).find("span");
s.html(marks[s.html()==marks.closedMark?'openedMark':'closedMark']);
});
あるいは、clickメソッドではなくtoggleを用いて
$('h4.conmenu').toggle(function(){
$(this).next().slideDown('fast');
$(this).find("span").html(marks.openedMark);
},function(){
$(this).next().slideUp('fast');
$(this).find("span").html(marks.closedMark);
});
とか。
一方で、メニューのタイトルとその子の構造的な関係が親子になっていないので、処理がしにくいようにも思われます。
(このままの構造だと、多階層メニューに展開するのが大変そう)
なお、ご質問とは関係ありませんが、
>//オンマウスでカーソル変更
の部分の処理は意味がないのではないでしょうか?
(マウスがはずれた時のカーソルを制御することに意味がないし、オンマウスの度に処理するのも無駄では?)
最初からCSSで cursor:pointer; としておけば済むように思います。
回答ありがとうございます。
おかげ様で、うまく表示できるようになりました。
オンマウスでカーソル変更に関してですが、
ご指摘の通り確かに必要ありませんね。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onmouseoverの表示切り替えが上...
-
javascriptで教えてください。 ...
-
「jQuery」アコーディオンメニ...
-
jQueryで、リンクURLの一致を確...
-
【短い】1つだけ展開/表示/非表...
-
jQueryのeqで最後からn番目以降...
-
jqueryのsortableで一部ソート...
-
【jQuery】遅延実行(タイムラ...
-
JavaScriptで、?マークとコロ...
-
質問に答えていくと、回答によ...
-
JqueryFileTree.js でフォルダ...
-
Jqueryでリストのスクロール
-
Jquery の slide.toggle で要素...
-
jQueryのhide,showで中の要素が...
-
JS <a></a>タグ内のリンク先ア...
-
jquery ドロップダウンメニュー...
-
javascript INNERHTMLについて
-
javascriptで、クリックしたら...
-
MAX関数を使ってからLEFT JOIN...
-
MFCで画像を表示させているので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
クリックした<a>タグのみにClas...
-
JQueryタブのアクティブ アン...
-
javascriptでEnterキーをtabキ...
-
「jQuery」アコーディオンメニ...
-
【jQuery】遅延実行(タイムラ...
-
ネストされたチェックボックス...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
文字と数字が混在する要素のsor...
-
Jquery の slide.toggle で要素...
-
【jQuery】hoverしたn秒後にイ...
-
チェックボックスに入っている...
-
クリックで表示、非表示するメ...
-
同一ページ内で、任意の文字列...
-
オンマウスで画像ロールオーバ...
-
javascriptで、クリックしたら...
-
PHPでログインフォーム
-
<li>タグの順番を入れ替える方法
-
jQuery タブメニューへのダイ...
おすすめ情報