当鼠标滑过表格时,表格的行会高亮显示,鼠标离开颜色复原,如果鼠标点击,点击行会保存为红色不变...

本文介绍了一种使用JavaScript实现表格行动态高亮显示的方法,并提供了实际的代码示例。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JavaScript动态高亮显示表格中的行 - 分享JavaScript-sharejs.com</title>
<style type="text/css">

body{
   font-size:0.8em;
   font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;
   margin:0px;
   padding:0px;
}
img{
   border:0px;
}
thead td{
   font-weight:bold;
   color:#000;
   background-color:#E2EBED;
}
td{
   padding:2px;
}
table{
   border:1px solid #000;
   border-collapse: collapse;
}
h1{
   font-size:1.3em;
   margin-bottom:0px;
}
table,h1,p,#ads{
   margin-left:10px;
}
#ads{
   margin-top:20px;
}

/* These classes are used by the script as rollover effect for table 1 and 2 */

.tableRollOverEffect1{
   background-color:#317082;
   color:#FFF;
}

.tableRollOverEffect2{
   background-color:#000;
   color:#FFF;
}

.tableRowClickEffect1{
   background-color:#F00;
   color:#FFF;
}
.tableRowClickEffect2{
   background-color:#00F;
   color:#FFF;
}

</style>
<script type="text/javascript">
/************************************************************************************************************
(C) www.dhtmlgoodies.com, November 2005

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/
var arrayOfRolloverClasses = new Array();
var arrayOfClickClasses = new Array();
var activeRow = false;
var activeRowClickArray = new Array();

function highlightTableRow()
{
   var tableObj = this.parentNode;
   if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

   if(this!=activeRow){
    this.setAttribute('origCl',this.className);
    this.origCl = this.className;
   }
   this.className = arrayOfRolloverClasses[tableObj.id];
  
   activeRow = this;
  
}

function clickOnTableRow()
{
   var tableObj = this.parentNode;
   if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;  
  
   if(activeRowClickArray[tableObj.id] && this!=activeRowClickArray[tableObj.id]){
    activeRowClickArray[tableObj.id].className='';
   }
   this.className = arrayOfClickClasses[tableObj.id];
  
   activeRowClickArray[tableObj.id] = this;
    
}

function resetRowStyle()
{
   var tableObj = this.parentNode;
   if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

   if(activeRowClickArray[tableObj.id] && this==activeRowClickArray[tableObj.id]){
    this.className = arrayOfClickClasses[tableObj.id];
    return;
   }
  
   var origCl = this.getAttribute('origCl');
   if(!origCl)origCl = this.origCl;
   this.className=origCl;
  
}
  
function addTableRolloverEffect(tableId,whichClass,whichClassOnClick)
{
   arrayOfRolloverClasses[tableId] = whichClass;
   arrayOfClickClasses[tableId] = whichClassOnClick;
  
   var tableObj = document.getElementById(tableId);
   var tBody = tableObj.getElementsByTagName('TBODY');
   if(tBody){
    var rows = tBody[0].getElementsByTagName('TR');
   }else{
    var rows = tableObj.getElementsByTagName('TR');
   }
   for(var no=0;no<rows.length;no++){
    rows[no].onmouseover = highlightTableRow;
    rows[no].onmouseout = resetRowStyle;
   
    if(whichClassOnClick){
     rows[no].onclick = clickOnTableRow;
    }
   }
  
}
</script>

</head>
<body>
<h1>Table example 1</h1>
<table id="myTable">
<thead>
   <tr>
    <td>Name</td>
    <td>Age</td>
    <td>Position</td>
    <td>Income</td>
    <td>Gender</td>
   </tr>
</thead>
<tbody>
   <tr>
    <td>John</td>
    <td>37</td>
    <td>Managing director</td>
    <td>90.000</td>
    <td>Male</td>
   </tr>
   <tr>
    <td>Susan</td>
    <td>34</td>
    <td>Partner</td>
    <td>90.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>David</td>
    <td>29</td>
    <td>Head of production</td>
    <td>70.000</td>
    <td>Male</td>
   </tr>
   <tr>
    <td>Laura</td>
    <td>29</td>
    <td>Head of marketing</td>
    <td>70.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>Kate</td>
    <td>18</td>
    <td>Marketing</td>
    <td>50.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>Mona</td>
    <td>21</td>
    <td>Marketing</td>
    <td>53.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>Mike</td>
    <td>21</td>
    <td>Marketing</td>
    <td>53.000</td>
    <td>Male</td>
   </tr>
   <tr>
    <td>Mark</td>
    <td>25</td>
    <td>Production</td>
    <td>52.000</td>
    <td>Male</td>
   </tr>
</tbody>
</table>

<h1>Table example 2</h1>
<table id="myTable2">
<thead>
   <tr>
    <td>Name</td>
    <td>Age</td>
    <td>Position</td>
    <td>Income</td>
    <td>Gender</td>
   </tr>
</thead>
<tbody>
   <tr>
    <td>Peter</td>
    <td>33</td>
    <td>Production</td>
    <td>55.000</td>
    <td>Male</td>
   </tr>
   <tr>
    <td>Jennifer</td>
    <td>24</td>
    <td>Production</td>
    <td>49.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>David</td>
    <td>25</td>
    <td>Photography</td>
    <td>51.000</td>
    <td>Male</td>
   </tr>
   <tr>
    <td>Anna</td>
    <td>42</td>
    <td>Head of photography</td>
    <td>56.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>Rita</td>
    <td>30</td>
    <td>Photography</td>
    <td>54.000</td>
    <td>Female</td>
   </tr>
   <tr>
    <td>Magnus</td>
    <td>25</td>
    <td>Freelancer</td>
    <td>65.000</td>
    <td>Male</td>
   </tr>
   <tr>
    <td>Johnny</td>
    <td>29</td>
    <td>Freelancer</td>
    <td>63.000</td>
    <td>Male</td>
   </tr>
</tbody>
</table>

<script type="text/javascript">
addTableRolloverEffect('myTable','tableRollOverEffect1','tableRowClickEffect1');
addTableRolloverEffect('myTable2','tableRollOverEffect2','tableRowClickEffect2');
</script>


<br><br>
<div align="center">
获取更多JavaScript代码,请登录JavaScript分享网 <a href="http://www.sharejs.com">http://www.sharejs.com</a>
</div>
</body>
</html>

在 Ant Design 的 `Table` 组件中实现下拉框修改字段值,并且在鼠标悬停于下拉选项保持行的背景色为根据 `Age` 字段设定的颜色,可以通过以下方式完成: ### 1. 使用 `render` 自定义单元格内容 在表格列配置中,使用 `render` 函数将 `Select` 组件嵌入到指定列(如 `Age` 列)中,允许用户通过下拉框修改字段值。 ```tsx import React from 'react'; import { Table, Select } from 'antd'; const { Option } = Select; const EditableTable = () => { const data = [ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park' }, { key: '2', name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park' }, { key: '3', name: 'Joe Black', age: 32, address: 'Sidney No. 1 Lake Park' }, ]; const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Age', dataIndex: 'age', key: 'age', onCell: (_, record) => ({ style: { backgroundColor: record.age > 35 ? '#f5222d' : '#595e6d', color: 'white' } }), render: (text) => ( <Select defaultValue={text} style={{ width: 80 }}> <Option value={30}>30</Option> <Option value={40}>40</Option> <Option value={50}>50</Option> </Select> ), }, { title: 'Address', dataIndex: 'address', key: 'address', }, ]; return <Table dataSource={data} columns={columns} />; }; export default EditableTable; ``` 上述代码中,`onCell` 属性用于动态设置单元格样式,根据 `age` 值不同赋予不同的背景颜色。这样即使鼠标悬停在下拉选项上,行的背景色也不会变化。 ### 2. 禁用默认的行悬停效果 Ant Design 的 `Table` 默认会在鼠标悬停改变整行的背景色。为了确保背景色始终由 `age` 字段控制,可以使用 `rowClassName` 属性来覆盖默认的悬停样式。 ```tsx <Table dataSource={data} columns={columns} rowClassName={() => 'custom-row'} /> ``` 并在 CSS 文件中添加如下样式: ```css .custom-row:hover { background-color: transparent !important; } ``` 此方法确保了即使鼠标悬停在下拉菜单上,也不会触发默认的行悬停背景色变化[^1]。 ### 3. 防止下拉框被遮挡 由于 `Select` 组件默认会基于可视区域进行定位调整,在某些场景下可能会导致下拉框被遮挡。可以通过配置 `dropdownAlign` 属性来关闭自动调整功能,以防止下拉框展开后输入框被遮挡的情况。 ```tsx <Select defaultValue={text} dropdownAlign={{ overflow: { adjustY: false } }} style={{ width: 80 }} > <Option value={30}>30</Option> <Option value={40}>40</Option> <Option value={50}>50</Option> </Select> ``` 该配置禁用了 Y 轴方向上的溢出调整逻辑,避免了因自动上移而导致的输入框遮挡问题[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值