【问题标题】:Check if Table tr has class then remove and add new class on Hover event检查 Table tr 是否有类,然后在 Hover 事件中删除并添加新类
【发布时间】:2010-03-02 12:41:08
【问题描述】:

我试图在鼠标悬停时突出显示表格行。每一行(tr)已经有一个“偶数”或“奇数”类。因此,要在鼠标悬停时突出显示该行,我需要先从该行中删除 CSS 类“偶数”或“奇数”。请多看我的剧本:

$('tr').hover(function() {

  if ($('this').hasClass('even')) {
    $(this).removeClass('even');
    $(this).addClass('rowhover');
  }

  else {
    $(this).removeClass('odd');
    $(this).addClass('rowhover');
  }
},
function() {
  $(this).removeClass('rowhover');
});

但是,它不起作用。你能指出我的错误吗?谢谢。

更新 1:

我用这个 toggleClass 喜欢这个

$("tr").hover(function() {
$(this).toggleClass("rowhover");
});

然后我用萤火虫检查元素,tr得到了这样的类:

<tr class="even rowhover"> where it should be <tr class="rowhover">

如果我这样使用,结果相同:

$('tr').hover(function() {

    $(this).addClass('rowhover');
    },
 function() {
    $(this).removeClass('rowhover');        
});

我的用于 rowhover 类的 CSS

.rowhover {background:green !important;} 

更新 2:

我尝试了贾斯汀约翰逊的建议:

$('tr').hover(function() {
    $(this).removeClass('even odd').addClass('rowhover');
        },
    function() {
     $(this).removeClass('rowhover').addClass(this.rowIndex % 2 == 0 ? "even" : "odd");
  });

我用 FireBug 检查了元素,结果如下:

//Notice the space in the class=" rowhover" when mouse hover
     <tr class=" rowhover">

 //Notice the space in the class=" even", class=" odd" when mouse out
 <tr class=" even"> or <tr class=" odd">

更新 3:它正在工作!

我关注了jQuery - Demonstrations and Examples of Tablesorter Plug-in 的帖子,但我需要添加 !important 来覆盖以前的样式,如下所示:

tr.overRow td { background-color:#FFFF99 !important; border :2px; }

我将该规则添加到 tablesorter 样式表的底部,然后使用以下脚本对其进行操作:

// Adds "over" class to rows on mouseover
$(".tablesorter tr").mouseover(function() { $(this).addClass("overRow"); });
// Removes "over" class from rows on mouseout
$(".tablesorter tr").mouseout(function() { $(this).removeClass("overRow"); }); 

现在,一切都按预期进行。谢谢大家的建议。很抱歉一开始没有提到我正在使用 jQuery tablesorter 插件,我只想突出显示悬停事件的行。

:D

【问题讨论】:

  • 关于您的更新:请参阅我的解决方案。您可能需要 .even.rowhover、.odd.rowhover 而不仅仅是 .rowhover ...或者您可以使用 !important,但这是不得已的办法。
  • @Kamal 是的,它包含在 $(document).ready 中
  • 当你说你可以在 firebug 中看到类时,我意识到 :)。无论如何,我已经在这里本地尝试了您在 FF 中的方法并且它正在工作(似乎与 toggleClass (突出显示为绿色))。你能定义“不工作”吗?因为在萤火虫中,如果你能看到类,它应该适用吗?
  • 空格很好(根据更新 2)。另一个愚蠢的问题。你的偶数和奇数造型是否适用?你的css在哪里?您确定您的网页正在接收它吗?
  • 当我将鼠标悬停在此样式应用的行上时 table.tablesorter tbody td { background-color:#FFFFFF; } 或此类应用 table.tablesorter tbody tr.odd td { background-color:#F0F0F6; } 而不是应该覆盖前一个类的类 rowhover 为什么类 rowhover 不覆盖前一个偶数和奇数?

标签: javascript jquery css tablesorter


【解决方案1】:

改变

if ($('this').hasClass('even')) {

if ($(this).hasClass('even')) {

删除this 周围的引号。此外,您需要重置原始类状态并且您可以链接您的函数:

$('tr').hover(function() {
    $(this).removeClass('even odd').addClass('rowhover');
},
function() {
    $(this).removeClass('rowhover').addClass(this.rowIndex % 2 == 0 ? "even" : "odd");
});

【讨论】:

  • 伙计,不敢相信我错过了。好眼力。 (有人支持这件事!我出去了!):D
  • 语法高亮:不仅仅是为了漂亮的颜色 ;)
  • 我试过了,但没有应用于行的 rowhover 类,我从 firebug 得到这个:在悬停行 在鼠标移出 或 请注意 class="even", class="odd", class="rowhover" 中的空格
  • 空间无关紧要。如果您的样式仍未应用,请查看您的 CSS 中的 .odd 和 .even 类。
【解决方案2】:

首先,尝试链接您的事件。

$(this).removeClass('even').addClass('rowhover');

其次,为什么要删除这些类?如果您只是添加类,然后通过组合类名在 CSS 中覆盖它:

.even { background:black; }
.even.rowhover { background:blue; }

【讨论】:

【解决方案3】:

您可以只保留“偶数”和“奇数”类,然后在悬停时添加/删除“rowhover”类(例如,突出显示的 TR 将具有“偶数”和“rowhover”类)。在 CSS 中将“rowhover”中的背景颜色(或用于突出显示行的任何颜色)设置为“!important”以覆盖“偶数”和“奇数”。

这样你就不必关心 TR 之前有什么类并且简单地简化你的代码,你只需在悬停时调用“添加 rowhover”并在鼠标悬停时将其删除。

【讨论】:

  • 为什么使用!important.even.rowhover {/* css */}.odd.rowhover {/* css */} 不会比简单的 .even.odd 获得足够大的特异性吗?
【解决方案4】:

您是否使用常规的“纯”javascript?在我看来,好像你会使用一些 javascript 库(例如 mootools)。

【讨论】:

    【解决方案5】:

    (作为替代)不要使用 jQuery 来实现此功能,只需使用内置的 css 功能

    而不是在你的 css 中使用 rowhover 类

    tr:hover
        {
            ...styles here
        }
    

    【讨论】:

    • 如果您可以忽略 IE6,那是个好主意。或者,最好的,甚至是两者都做,并将额外的 js 仅降级到 IE6。
    【解决方案6】:

    您的这行代码似乎是错误的:

    if ($('this').hasClass('even')) {
    

    你引用了this关键字,试试这个:

    if ($(this).hasClass('even')) {
    

    【讨论】:

    • 不确定,出于好奇,toggleClass 可以在这里使用吗?
    • 我认为你错过了他想要做的事情。
    • @DN: 已修复,看起来我在他的代码中发现了错误。谢谢
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签