ユーザーからの投稿をページに表示します。クラス名「posts」のメインの親divがあり、各投稿はクラス名「row」のdivに出力されます。したがって、div.posts 内にはたくさんの div.row があります。それぞれこんな感じ。
<div class="row clearfix">
<div class="left-column">
<img src="..." title="" />
</div>
<div class="main-column">
<div class="row-text">Post Text...</div>
<div class="row-date">Posted Date...</div>
</div>
<div class="actions-column">
<a href="#">Link</a>
<a href="#">Link 2</a>
<a href="#">Link 3 etc.</a>
</div>
</div>
CSS を介して、actions-column はデフォルトで display:none に設定されています。ユーザーのマウスオーバーが投稿 (div.row) の場合、アクション列を表示したいと思います。私の最初の方法は、各行に対してもマウスオーバーを設定することでした。これは、ブラウザーに負担をかけ、速度を低下させていました。私はいくつかの調査を行い、イベント委任に出くわし、試してみることにしました。これまでのところ、どの行がターゲットにされているかを特定できますが、クラス 'actions-column' でその子 div をターゲットにする方法がわかりません。
これまでのコード...
$(window).load(function(){
$('.posts').mouseover(function(e){
var $row, $tgt = $(e.target);
if ($tgt.hasClass("row")) {
$row = $tgt;
} else {
if ($tgt.parent().parent().hasClass('row'))
$row = $tgt.parent().parent();
else if ($tgt.parent().hasClass('row'))
$row = tgt.parent();
else
return false;
}
//code here to select div.actions-column and show it
});
$('.posts').mouseover(function(e){
var $row, $tgt = $(e.target);
if ($tgt.hasClass("row")) {
$row = $tgt;
} else {
if ($tgt.parent().parent().hasClass('row'))
$row = $tgt.parent().parent();
else if ($tgt.parent().hasClass('row'))
$row = tgt.parent();
else
return false;
}
//code here to select div.actions-column and hide it
});
});