jQueryを利用してナビゲーションを実装する
第3回・
![ドロップダウンメニュー ドロップダウンメニュー](/assets/images/design/serial/01/jquery-site-production/0004/thumb/TH400_001.png)
今回の記事で使うメソッドの紹介と簡単な説明
前回同様本題に入る前に、
jQueryオブジェクト
第1回、
出力されたデータの通り、
![DIV要素の数を調べる DIV要素の数を調べる](/assets/images/design/serial/01/jquery-site-production/0004/006.png)
each()
eachメソッドは対象の複数のjQueryオブジェクトに対してそれぞれ関数を実行するメソッドです。関数の引数にiを持たせることで、
![eachメソッドの実行 eachメソッドの実行](/assets/images/design/serial/01/jquery-site-production/0004/007.png)
![eachメソッド実行結果 eachメソッド実行結果](/assets/images/design/serial/01/jquery-site-production/0004/008.png)
上記のサンプルでは、
hover()
hoverメソッドは対象のjQueryオブジェクトのmouseover,mouseoutイベントに任意の関数をbindするメソッドです。hoverメソッドの第1引数にmouseover、
<ahref="#">ここにマウスカーソルをのせたり外したりしてください</a>
jQuery(function($){
$('a').hover(function(){
console.log('mouseover');
},function(){
console.log('mouseout');
});
});
parent()
parentメソッドは対象のjQueryオブジェクトの親要素を取得して返すメソッドです。
<p><ahref="#"id="child">consoleにA要素の親要素を表示します</a></p>
jQuery(function($){
console.log($('#child').parent());
});
ドロップダウンメニューの実装
HTMLは基本的なULリストの入れ子で、
<ulid="menu">
<li>
<ahref="#">メニュー1</a>
<ul>
<li><ahref="#">メニュー1-1</a></li>
<li><ahref="#">メニュー1-2</a>
<ul>
<li><ahref="#">メニュー1-2-1</a></li>
<li><ahref="#">メニュー1-2-2</a></li>
<li><ahref="#">メニュー1-2-3</a>
<ul>
<li><ahref="#">メニュー1-2-3-1</a></li>
<li><ahref="#">メニュー1-2-3-2</a></li>
<li><ahref="#">メニュー1-2-3-3</a></li>
<li><ahref="#">メニュー1-2-3-4</a></li>
</ul>
</li>
<li><ahref="#">メニュー1-2-4</a></li>
</ul>
</li>
<li><ahref="#">メニュー1-3</a>
<ul>
<li><ahref="#">メニュー1-3-1</a></li>
<li><ahref="#">メニュー1-3-2</a></li>
<li><ahref="#">メニュー1-3-3</a></li>
<li><ahref="#">メニュー1-3-4</a></li>
</ul>
</li>
<li><ahref="#">メニュー1-4</a></li>
</ul>
</li>
</ul>
ul#menu {
padding: 15px 0 0 15px;
}
ul#menu li {
float: left;
position: relative;
}
ul#menu li a {
border: solid #ccc 1px;
border-right: none;
padding: 10px;
display: block;
width:100px;
background: #eee;
}
ul#menu li a.last-child {
border-right: solid #ccc 1px;
}
ul#menu li a:hover,
ul#menu li a.active {
color: #fff;
background: #666 !important;;
}
ul#menu li a.dropMenuPrev {
background: #bbb;
}
ul#menu li ul {
position: absolute;
top:100%;
left: 0;
}
ul#menu li ul li {
float: none;
*display: inline;
}
ul#menu li ul li a {
border:
solid #ccc 1px;
border- bottom: none;
}
ul#menu li ul li
a.last-child {
border- bottom:
solid #ccc 1px;
}
ul#menu li
ul li ul {
  ;  ; top: 0;
  ;  ; left:
100%;
}
jQuery(function($){
// 最後のLI要素の子要素にあたるA要素の classにはlast-childを振る
$('#menu li:last-child > a').addClass('last-child');
// 1) #menu子要素のULは全てドロップダウンメ ニューなのでその親要
素を取得しておく
var dropMenuParent = $('ul','#menu').parent();
// 2) 全てのdropMenuParentで同じ関数を実行する
dropMenuParent.each(function(){
// 3) 親の直下の子要素がドロップダウンメ ニューになる
ので取得する
var dropMenu = $('>ul',this);
// 4) dropMenuを隠した上で、直前の要素(こ こではアン
カー要素)のclassにdropMenuPrevを振る
dropMenu.hide().prev().addClass('dropMenuPrev');
// 5) thisはdropMenuParent[i]を指す
// dropMenuParent[i]にhoverメソッド を利用して
// mouseover, out時の処理を割り当てる
$(this).hover(function(){
// 6) mouseoverでdropMenu を表示した後
// 直前のA要素のclass にactiveを振る
dropMenu.show().prev().addClass ('active');
},function(){
// 7) mouseoutでdropMenu を非表示にした後
// 直前のA要素のclass からactiveを取り除く
dropMenu.hide().prev().removeClass
('active');
});
});
});
ul#menuの子・
前回でも少し出てきましたが、
jQueryオブジェクトの項目で説明した通り、
vardiv=$('div');
divは[div,div,div]として扱え、
eachメソッド内では、
最後にhoverメソッドを使って
いかがだったでしょうか。要点さえ押さえればこのようなナビゲーションも簡単な短いコードで実装できてしまうところが、