【问题标题】:Highlight specific table cell of the row that was hovered突出显示悬停行的特定表格单元格
【发布时间】:2020-03-29 10:26:33
【问题描述】:

我有一张桌子,看起来像这样:

| Company              | Contact         | Country  |
|---|---|---|
| Alfreds Futterkiste  | Maria Anders    | Germany  | 
| Centro Moctezuma     | Francisco Chang | Mexico   |

我希望能够突出显示一行(例如Centro Moctezuma)并且突出显示第一列中的公司名称。因此,在突出显示第 2 行时,应突出显示名称 Centro Moctezuma 而不是名称 Alfreds Futterkiste.

我有一些代码在将鼠标悬停在任何行上时突出显示第一列中的所有名称,这不是我想要的。如何重新格式化我的代码,以便仅突出显示悬停行的公司名称?

这是一个显示问题的小提琴:https://jsfiddle.net/hdo236vm/


HTML sn-p:

<table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr class="row">
    <td class="name">Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr class="row">
    <td class="name">Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr class="row">
    <td class="name">Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr class="row">
    <td class="name">Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr class="row">
    <td class="name">Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr class="row">
    <td class="name">Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>

JS sn-p:

function nameHighlight() {
    $(".row").mouseover(function () {
        $(".name").addClass("name__highlight")
    })
    $(".row").mouseleave(function () {
        $(".name").removeClass("name__highlight")
    })
}

nameHighlight();

CSS:

.name__highlight {
  color: red;
}

【问题讨论】:

  • 你为什么不直接使用:hover
  • 嘿@sandrooco,我想将鼠标悬停在行中的任意位置并突出显示公司名称。如果我选择name:hover,那么我只需要将鼠标移到名称上即可。
  • 你可以像这样使用纯 CSS 来做到这一点:tr.row:hover .name { color: red; }。但是不要忘记之前删除你的JS代码。
  • @Konrud 哇,这比我预期的要简单得多。如果你把它作为一个答案,那么我会接受它。
  • @Bodrov,刚刚做了。

标签: javascript jquery function class events


【解决方案1】:

你可以像这样使用纯 CSS 来做到这一点:

tr.row:hover .name {
 color: red;
}

注意:在应用此 CSS 之前,不要忘记删除您的 JS 代码。

【讨论】:

    【解决方案2】:

    您的代码将 .name__highlight 类添加到所有具有 .name 类的元素。您需要搜索悬停的元素并在其中找到 .name 元素。像这样:

    function nameHighlight() {
        $(".row").mouseover(function () {
            $(this).find(".name").addClass("name__highlight")
        })
        $(".row").mouseleave(function () {
            $(this).find(".name").removeClass("name__highlight")
        })
    }
    
    nameHighlight();
    

    【讨论】:

    • 你应该总是更喜欢纯 CSS 解决方案而不是 JS。请参阅@Konrud 的回答。
    • 是的,但这个解决方案泛化到无法在纯 CSS 中完成的操作,并解释了为什么原始代码无法工作的细节。我同意其他答案应该是首选解决方案,但我的也增加了价值。
    • 作为评论是的,但不是解决方案。
    • 不符合the guidelines
    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2013-06-13
    • 2012-12-23
    • 2020-08-13
    • 2018-01-07
    • 2012-03-29
    相关资源
    最近更新 更多