当鼠标移到单元格(tr、td)背景变色 多种解决方案

本文介绍了使用JavaScript实现表格单元格及其所在列背景颜色变化的方法。包括直接改变单个单元格颜色的简单代码示例,以及通过遍历表格或利用COL标签实现整列颜色变化的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种:
td单元格变色,只用简单的js代码即可实现。
很简洁的代码,点击即可运行该代码
<body>
<table border="1px">
 <tr>
  <th id="id_item1" onmouseover="this.bgColor='green'" onmouseout="this.bgColor=''">Menu Item1</th>
 </tr>
 <tr>
  <th>Menu Item2</th>
 </tr>
</table>
</body>

第二种:
tr列变色。把鼠标移到一个表格上的时候表格一列的背景变色,可用于论坛列表、新闻发布系统、后台等等。提供两种解决方案。

解决思路:
我们知道,仅变换某个单元格的背景颜色的话用就行了,而要变换一列的背景颜色就必须要取得当前单元格在行中的索引值,然后遍历表格的所有行,改变行中相应单元格的背景颜色。
具体步骤:
    方法一:利用表格的相关集合遍历设置。
1.插入表格代码
<table width="200" height="30">
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
</table>
2.加入控制背景色功能的JavaScript脚本。
<script>
function cells_color(){
var oColor,td=event.srcElement
if(td.tagName!="TD")
   return ;
if(event.type=="mouseover"
   oColor="#dedede"
else oColor="#ffffff"
tb=td.parentElement.parentElement
for(var i=0;i<tb.rows.length;i++) 
    tb.rows[i].cells[td.cellIndex].bgColor=oColor
}
</script>
3.在表格中加入鼠标事件并触发相应函数后的完全代码如下:
<script>
function cells_color(){
var oColor,td=event.srcElement
if(td.tagName!="TD") //如果事件不是发生在单元格上,退出函数
   return
if(event.type=="mouseover") //判断事件类型,决定单元格改变的颜色
   oColor="#dedede"
else oColor="#ffffff"
tb=td.parentElement.parentElement  //单元格的上两级对象为表格
//遍历表格的所有行,设置相应单元格的背景颜色
for(var i=0;i<tb.rows.length;i++) 
    tb.rows[i].cells[td.cellIndex].bgColor=oColor
}
</script>
<table width="200" height="30" border="1" onmouseover="cells_color()" onmouseout="cells_color()">
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
</table>
技巧:可以多加一个循环,改变鼠标所在的行的所有单元格背景,脚本修改如下:
<script>
 function cells_color(){
var oColor,td=event.srcElement
 if(td.tagName!="TD")
   return ;
if(event.type=="mouseover")
    oColor="#dedede"
 else oColor="#ffffff"
 tr=td.parentElement
 tb=tr.parentElement
//下面是一行变色
 for(var i=0;i<tr.cells.length;i++)
     tr.cells[i].bgColor=oColor
//下面是一列变色
 //for(var i=0;i<tb.rows.length;i++)
    // tb.rows[i].cells[td.cellIndex].bgColor=oColor
 }
 </script>
方法二:利用表格的COL标签将表格分组实现。
完整代码:
<script>
function cells_color(){
var oColor,td=event.srcElement
if(td.tagName!="TD") //如果事件不是发生在单元格上,退出函数
   return
if(event.type=="mouseover") //判断事件类型,决定单元格改变的颜色
   oColor="#dedede"
else oColor="#ffffff"
//依次捕获的对象为 td.tr.tbody.table.colgroup单元格的上两级对象为表格
cols=td.parentElement.parentElement.parentElement.children[0]
    cols.children[td.cellIndex].style.backgroundColor=oColor
}
</script>
<table width="200" height="30" border="1" onmouseover="cells_color()" onmouseout="cells_color()">
<col><col><col>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
  <tr>
    <td>demo</td>
    <td>demo</td>
    <td>demo</td>
  </tr>
</table>
    注意:虽然没有显式定义TBODY标签,但TBODY将为全部表格自动定义。
特别提示
因为方法二比方法一少了一个遍历,所以效果更高。代码运行后的效果如图 1.2.37所示。
图 1.2.37 鼠标移上单元格是单元格所在列的背景颜色全部改变
特别说明
本例涉及到的知识点比较多,逐一介绍如下:
col 指定基于列的表格默认属性。
colgroup 指定表格中一列或一组列的默认属性。
parentElement 获取对象层次中的父对象。
children 获取作为对象直接后代的 DHTML 对象的集合。
backgroundColor 设置或获取对象的背景颜色。
### 实现HTML表格单元格(`<td>`)在鼠标悬停时字体背景颜色变化的方法 可以通过 CSS 的 `:hover` 伪类实现当鼠标悬停在 `<td>` 上时,其背景颜色发生变化的效果。以下是几种常见方式及具体实现: #### 使用纯CSS实现表格单元格悬停背景色变化 直接使用 CSS 中的 `:hover` 伪类样式可以轻松为 `<td>` 添加悬停效果。例如,将鼠标悬停时的背景颜色设置为浅灰色: ```css td:hover { background-color: #f0f0f0; } ``` 该方法简单且适用于所有支持 CSS 的浏览器[^5]。 #### 结合类选择器实现特定单元格的悬停效果 如果希望某些特定的 `<td>` 单元格具有不同的悬停效果,可以结合类选择器进行定义。例如: ```html <td class="highlight">高亮文本</td> ``` ```css .highlight:hover { background-color: #ffd700; /* 悬停时变为金色 */ } ``` 这种方式允许对不同单元格应用不同的悬停样式,增强页面交互性。 #### 在使用 `el-table` 组件时修改悬停背景色 对于基于 Element UI 的项目,若需要自定义 `<el-table>` 表格中行的悬停背景色,可以在全局或组件内部的 CSS 中添加如下代码: ```css .el-table--enable-row-hover .el-table__body tr:hover > td { background-color: #6495ED !important; } ``` 此样式会覆盖默认的悬停背景色,适用于整个表格中的每一行单元格[^1]。 #### 使用JavaScript动态控制悬停效果 如果需要更复杂的交互逻辑,比如根据内容动态改变背景色,可以使用 JavaScript 监听鼠标事件。例如: ```javascript document.querySelectorAll("td").forEach(function(cell) { cell.addEventListener("mouseover", function() { this.style.backgroundColor = "#ffcccb"; // 鼠标进入时变为淡红色 }); cell.addEventListener("mouseout", function() { this.style.backgroundColor = ""; // 鼠标离开时恢复默认 }); }); ``` 该方法提供了更高的灵活性,适合需要条件判断或动态计算样式的场景。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值