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

来源:互联网 发布:excel中怎么筛选数据 编辑:程序博客网 时间:2024/06/06 08:50
当鼠标移到单元格(tr、td)背景变色 多种解决方案
第一种:
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 设置或获取对象的背景颜色。
原创粉丝点击