悬停时突出显示整行

时间:2012-02-18 16:49:50

标签: jquery html css

我有一个javaScript函数,它循环遍历可变数量的迭代并将HTML吐出到DOM /网页。因此在循环之后它填充了以下div:

  <div class="energyRowContainer" id="energyRowContainer">

  </div>
像这样......

<div class="energyRowContainer" id="energyRowContainer">

<div id="energyRow0" class="energyRow">
<div class="energyTypeHead"> 1.2.2012 </div><div class="energyUnitMWH"> 93 </div><div class="energyUnitT"> 174 </div><div class="energyUnitM3_1"> 6594 </div><div class="energyUnitM3_2"> 116 </div><div class="energyUnitM3_3"> 34162 </div><div class="energyUnitM3_4"> 2625 </div><div class="energyUnitM3_5"> 17886 </div> <div class="energyUnitM3_6"> 21 </div>
</div>

<div id="energyRow1" class="energyRow">
<div class="energyTypeHead"> 1.2.2012 </div><div class="energyUnitMWH"> 93 </div><div class="energyUnitT"> 174 </div><div class="energyUnitM3_1"> 6594 </div><div class="energyUnitM3_2"> 116 </div><div class="energyUnitM3_3"> 34162 </div><div class="energyUnitM3_4"> 2625 </div><div class="energyUnitM3_5"> 17886 </div> <div class="energyUnitM3_6"> 21 </div>
</div>

<div>

现在我想使用Jquery或CSS来改变整行的背景颜色(class =“energyRow”),但只是创建一个energyRow:hover不起作用,因为我将鼠标悬停在子div上。 ..我曾经考虑过这样使用,但我无处可寻......任何想法都没有?

$('#energyRowContainer > .energyRow, ').hover(function() {
    $(this).parent().toggleClass('name_of_a_hover_class');
});

3 个答案:

答案 0 :(得分:3)

我相信您的问题是您是动态地将元素添加到DOM但不使用.delegate()等事件委托绑定方法。这可以通过CSS完成(这对性能有好处,尽管通过JS向元素添加类不会产生更多的开销):

#energyRowContainer .energyRow:hover {
    background : yellow;
}

以下是演示:http://jsfiddle.net/zNWGL/

此外,您距离如此之近,您需要做的只是从您的选择中删除.parent()。以下是.parent()http://jsfiddle.net/zNWGL/1/

代码的演示

答案 1 :(得分:0)

这有帮助吗?

$('#energyRowContainer').find('.energyRow').hover(function() {
    $(this).parent().addClass('name_of_a_hover_class'); // On hover
}, function() {
    $(this).parent().removeClass('name_of_a_hover_class'); // On not hover
});

不要忘记在div或者准备好的事件之后添加它。

答案 2 :(得分:0)

您的代码中的问题是您正在使用$(this).parent()选择您在其上悬停的元素的父级并在其上切换类。

您只需使用$(this),它将指向您悬停的容器并在其上切换类。

此外,由于元素是动态添加的,因此您应该在delegate上使用on(在jQuery 1.7中添加)

使用delegate

$('#energyRowContainer').delegate('.energyRow', 'hover', function() {
    $(this).toggleClass('name_of_a_hover_class');
});

使用on

$('#energyRowContainer').on('hover', '.energyRow', function() {
    $(this).toggleClass('name_of_a_hover_class');
});

但是你可以通过像这样的纯CSS来实现这种行为。

.energyRow:hover {
    background : whateverColor;
}