【问题标题】:highlight selected row and column on mouseover in html table在 html 表中鼠标悬停时突出显示选定的行和列
【发布时间】:2015-02-04 15:23:08
【问题描述】:

我需要在鼠标悬停时突出显示表格中单元格的行和列。生成的表格是动态的,我得到了 来自数据库的值并显示在 html 表中。表的结构如下图所示,我无法修改现有结构。 请用我现有的 html 代码建议我如何使用 jquery/css 突出显示表中选定的行和列。 请找到小提琴http://jsfiddle.net/0w9yo8x6/78/

下面是html代码:

<div>
<table border="1px">
<tr>
<td>
    <table style="width:100%">
        <tr title="Table Header">
        <td>
        Title
        </td>
        </tr>
    </table>
</td>
</tr>
<tr>
<td>
    <table border="1px">
        <tr>
         <td></td>
         <td bgcolor="grey">Header1</td>
         <td bgcolor="grey">Header2</td>
         <td bgcolor="grey">Header3</td>
         <td bgcolor="grey">Header4</td>
         <td bgcolor="grey">Header5</td>
         </tr>

    <tr>
         <td bgcolor="grey">Row1</td> 
         <td>
            <table>
            <tr>
            <td>
               Cell1  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell1
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell1  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell1
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell1  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell1
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell1  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell1
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell1  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell1
            </td>
            </tr>
          </table> 
      </td> 
      </tr>

         <tr>
         <td bgcolor="grey">Row2</td> 
         <td>
            <table>
            <tr>
            <td>
               Cell2  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell2
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell2  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell2
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell2  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell2
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell2  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell2
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell2  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell2
            </td>
            </tr>
          </table> 
      </td> 
      </tr>


         <tr>
         <td bgcolor="grey">Row3</td> 
         <td>
            <table>
            <tr>
            <td>
               Cell3  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell3
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell3  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell3
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell3  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell3
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell3  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell3
            </td>
            </tr>
          </table> 
      </td> 
         <td>
            <table>
            <tr>
            <td>
               Cell3  
            </td>
            </tr>
            <tr> 
            <td class='innerCell'>
            Inner cell3
            </td>
            </tr>
          </table> 
      </td> 
      </tr>
      </table>
      </td>
      </tr>
      </table>
      </div>

【问题讨论】:

标签: javascript jquery html css


【解决方案1】:

突出显示特定的行和列。对于我使用nth-child() 作为选择器的一部分的列。希望这会有所帮助。

注意:我将 .myCell 类添加到第二级嵌套表的 tds 中,以便更轻松地为 jquery 选择器名称。

$(document).ready(function() {
    $('.myCell').on('mouseover', function() {
        $(this).closest('tr').addClass('highlight');
        $(this).closest('table').find('.myCell:nth-child(' + ($(this).index() + 1) + ')').addClass('highlight');
    });
    $('.myCell').on('mouseout', function() {
        $(this).closest('tr').removeClass('highlight');
        $(this).closest('table').find('.myCell:nth-child(' + ($(this).index() + 1) + ')').removeClass('highlight');
    });
});
.highlight {
    background-color:lightgray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    <table border="1px">
        <tr>
            <td>
                <table style="width:100%">
                    <tr title="Table Header">
                        <td>
                            Title
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td>
                <table border="1px">
                    <tr>
                        <td></td>
                        <td bgcolor="grey">Header1</td>
                        <td bgcolor="grey">Header2</td>
                        <td bgcolor="grey">Header3</td>
                        <td bgcolor="grey">Header4</td>
                        <td bgcolor="grey">Header5</td>
                    </tr>
                    
                    <tr>
                        <td bgcolor="grey" class="myCell">Row1</td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell1  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell1
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell1  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell1
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell1  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell1
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell1  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell1
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell1  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell1
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                    </tr>
                    
                    <tr>
                        <td bgcolor="grey" class="myCell">Row2</td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell2  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell2
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell2  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell2
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell2  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell2
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell2  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell2
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell2  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell2
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                    </tr>
                    
                    
                    <tr>
                        <td bgcolor="grey" class="myCell">Row3</td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell3  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell3
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell3  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell3
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell3  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell3
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell3  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell3
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                        <td class="myCell">
                            <table>
                                <tr>
                                    <td>
                                        Cell3  
                                    </td>
                                </tr>
                                <tr> 
                                    <td class='innerCell'>
                                        Inner cell3
                                    </td>
                                </tr>
                            </table> 
                        </td> 
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</div>

【讨论】:

  • 这比我放在一起的解决方案要好得多。我可能会发布我的替代方案。但我确信这个 jQuery 解决方案比 querySelector vanilla 快得多解决方案我将添加。这是一个可比较的性能测试:jsperf.com/bubblehandlingeventlistener
  • @indubitablee,感谢您的支持。我遵循了与您在上面的答案中提到的相同的方法,但只有列突出显示而不是行。请找到 jsfiddle jsfiddle.net/0w9yo8x6/85 。请建议要进行哪些修改以突出显示行和列。谢谢..
  • @user222,您可以通过以下方式设置每一行的样式:style="background-color:rgb(252, 252, 252);",它会覆盖 jquery 添加的类highlight。如果您从每个&lt;tr&gt; 中删除它,它将按预期突出显示该行。见jsfiddle.net/0w9yo8x6/86
  • 如果您使用透明颜色,如 rgba(0, 0, 0, .12),您会看到当前单元格更加突出显示。
【解决方案2】:

由于您将表格嵌套两层,因此您的 CSS 应如下所示:

table table tr:hover td {
  background-color: #fbc93d;
}

这是一个基于您的小提琴的示例:

Example

【讨论】:

  • 我想突出显示选定的列以及行。请建议。 @Josh Burgess
  • @user222,我怀疑这将是一个 javascript 实现。
【解决方案3】:

在你的 CSS 中试试这个:

td table td:hover{background-color:gray;}

【讨论】:

  • 它唯一突出显示所选单元格,我想在鼠标悬停时突出显示所选单元格的整个行和列.. @Ilyas Mimouni
【解决方案4】:

Example

将表格放在表格中并不是很好的做法,请查看如何使用 div 和大纲。还要了解如何使用 thead、tbody 和 colgroups 创建表格。

希望我能帮上忙。

以下只是 HTML 代码,需要在其中添加 thead 和 tbody,我会让你弄清楚。

    <table border="1px">
    <colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
    <tr>
     <td></td>
     <td bgcolor="grey">Header1</td>
     <td bgcolor="grey">Header2</td>
     <td bgcolor="grey">Header3</td>
     <td bgcolor="grey">Header4</td>
     <td bgcolor="grey">Header5</td>
     </tr>

<tr>
     <td bgcolor="grey">Row1</td> 
     <td>
        <table>
        <tr>
        <td>
           Cell1  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell1
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell1  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell1
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell1  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell1
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell1  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell1
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell1  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell1
        </td>
        </tr>
      </table> 
  </td> 
  </tr>

     <tr>
     <td bgcolor="grey">Row2</td> 
     <td>
        <table>
        <tr>
        <td>
           Cell2  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell2
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell2  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell2
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell2  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell2
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell2  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell2
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell2  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell2
        </td>
        </tr>
      </table> 
  </td> 
  </tr>


     <tr>
     <td bgcolor="grey">Row3</td> 
     <td>
        <table>
        <tr>
        <td>
           Cell3  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell3
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell3  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell3
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell3  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell3
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell3  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell3
        </td>
        </tr>
      </table> 
  </td> 
     <td>
        <table>
        <tr>
        <td>
           Cell3  
        </td>
        </tr>
        <tr> 
        <td class='innerCell'>
        Inner cell3
        </td>
        </tr>
      </table> 
  </td> 
  </tr>
  </table>

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2014-03-17
    相关资源
    最近更新 更多