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

    技术2022-05-18  16

    第一种: td单元格变色,只用简单的js代码即可实现。 很简洁的代码,点击即可运行该代码 <body> <table border="1px">  <tr>   <th id="id_item1" οnmοuseοver="this.bgColor='green'" οnmοuseοut="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" οnmοuseοver="cells_color()" οnmοuseοut="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" οnmοuseοver="cells_color()" οnmοuseοut="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 设置或获取对象的背景颜色。

    最新回复(0)