用HTML+JavaScript实现表格的分行变色加鼠标移动变高亮
2015-04-14 00:22
826 查看
用HTML+JavaScript实现表格的分行变色加鼠标移动变高亮
效果如下:错误代码(只在srcipt中出现错误):
<script> window.onload=function(){ var oTab=document.getElementById('tab1'); for(var i=0;i<oTab.tBodies[0].rows.length;i++){ if (i%2==0){ oTab.tBodies[0].rows[i].style.background='snow'; }else{ oTab.tBodies[0].rows[i].style.background='white'; } oTab.tBodies[0].rows[i].onmouseover=function(){ <pre name="code" class="javascript"> oTab.tBodies[0].rows[i]<span style="font-family: Arial, Helvetica, sans-serif;">.style.background='green';</span>}; oTab.tBodies[0].rows[i].onmouseout=function(){ if (i%2==0){ oTab.tBodies[0].rows[i].style.background='snow'; }else{ oTab.tBodies[0].rows[i].style.background='white'; } }; } } </script>
在鼠标移入到哪一行时,这一行的背景颜色变为绿色,在鼠标移出时,如果i除2的余数是0的话,那么设置背景为snow,否则为white。
看似正确,但是其实这里是错误的,因为
oTab.tBodies[0].rows[i].onmouseover=function(){ <pre name="code" class="javascript"> oTab.tBodies[0].rows[i]<span style="font-family: Arial, Helvetica, sans-serif;">.style.background='green';</span>};
这里的意思其实是为oTab.tBodies[0].rows[i]的onmouseover属性设置一个方法,方法中的i与oTab.tBodies[0].rows[i]的i并不为同一个i。为了证明这一点,我写了如下的代码加以证明:
<script> function counter(){ var n=0; var oArray=[]; oArray =function(n){return n++;} oArray[n+1]=function(n){n=0}; return oArray; } var oArray=counter(); alert(oArray[1]); </script>因为设置了一个变量n为0,所以oAarray
实际为oArray[0],而oArray[n+1]则为oArray[1]。那么如果oArray[1]中的方法function(n){n=0}中的n和oArray
中的n相同的话,那么运行之后应该跳出function(1){1=0};但是运行结果如下:
我们将代码稍微修改一下:
<script> function counter(){ var n=0; var oArray=[]; oArray =function(){return n++;} oArray[n+1]=function(){n=0}; return oArray; } var oArray=counter(); oArray[0](); //让function运行一次 alert(oArray[0]());//因为oArray[0]已经运行一次,n加1。那么在此运行跳出的就是应该是1。 </script>是不是这样呢?运行结果如下:
果然向我所说的那样,那么不是说n和函数外的n没有关系吗?怎么又会得到1呢?
原因是闭包的作用,在上面的代码中,我们先运行了一次counter()函数,这样就生成了一个数组oArray,在oArray中存储了两个函数分别是function(){return n++}和function(){n=0}。因为counter()函数的原因,使得function(){return n++}函数和function(){n=0}函数成为了counter闭包的一员,那么它俩均可以共享变量n。然后我们通过调用function(){return
n++}函数,那么此时就得到了如上的结果。
在回到我们的最初的错误代码当中,我将代码稍微修改一下:
<script> window.onload=function(){ var oTab=document.getElementById('tab1'); for(var i=0;i<oTab.tBodies[0].rows.length;i++){ if (i%2==0){ oTab.tBodies[0].rows[i].style.background='snow'; }else{ oTab.tBodies[0].rows[i].style.background='white'; } oTab.tBodies[0].rows[i].onmouseover=function(){ this.style.background='green'; }; oTab.tBodies[0].rows[i].onmouseout=function(){ if (i%2==0){ this.style.background='snow'; alert(i); }else{ this.style.background='white'; alert(i); } }; } }运行一下看到的结果是:
跳出的结果是5。这是如何得到的呢?我们来分析一下:
代码中我们通过for循环对每一行的鼠标移入移出加入方法,其实就是如同在oArray数组中加入那两个方法一样,在窗口加载的时候(window.onload()),我们通过循环的方式在oTab.tBodies[0].rows数组中添加方法一样了五组移入移出方法,但是移出方法中的i并不是rows[i]中的i。然后我们在鼠标移入移出时其实就是相当于执行了一次移入移出方法,那么因为for循环的原因,变量i执行到最后是5;所以页面中跳出数字5。
正确代码:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>表格</title> <script> window.onload=function(){ var oTab=document.getElementById('tab1'); for(var i=0;i<oTab.tBodies[0].rows.length;i++){ if (i%2==0){ oTab.tBodies[0].rows[i].style.background='snow'; }else{ oTab.tBodies[0].rows[i].style.background='white'; } var oldcolor=''; oTab.tBodies[0].rows[i].onmouseover=function(){ oldcolor=this.style.background; this.style.background='green'; }; oTab.tBodies[0].rows[i].onmouseout=function(){ this.style.background=oldcolor; }; } } </script> </head> <body> <table id="tab1" border="1" width="800px"> <thead> <td>ID</td> <td>姓名</td> <td>年龄</td> </thead> <tbody> <tr> <td>1</td> <td>张三</td> <td>27</td> </tr> <tr> <td>2</td> <td>李四</td> <td>27</td> </tr> <tr> <td>3</td> <td>王五</td> <td>27</td> </tr> <tr> <td>4</td> <td>赵六</td> <td>27</td> </tr> <tr> <td>5</td> <td>张七</td> <td>27</td> </tr> </tbody> </table> </body> </html>此文章为本人原创作品,如需引用,需说明引用出处,违反者将追究法律责任。
相关文章推荐
- JavaScript实例---表格隔行变色以及移入鼠标高亮
- jQuery插件实现表格隔行换色且感应鼠标高亮行变色
- jQuery实现HTML表格隔行变色及鼠标悬停变色效果 .
- jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
- 用jquery实现双色表格,鼠标移动到上面时,行变色~!
- 完整的html+css+javascript实现跟随鼠标移动显示选中效果
- 利用jquery实现,鼠标移动到表格变色特效
- 一个简单但常用的javascript表格样式_鼠标划过行变色 简洁实现
- 鼠标经过背景变色,CSSJavascript实现表格背景变色
- 用js实现表格中鼠标移动行变色
- html表格table实现鼠标移入移出行变色的一种可用方法
- js实现表格隔行变色和鼠标移入高亮
- jQuery实现鼠标移动到表格上时变色
- 一个简单但常用的javascript表格样式_鼠标划过行变色 简洁实现
- jQuery实现HTML表格隔行变色及鼠标悬停变色效果
- jQuery插件实现表格隔行换色且感应鼠标高亮行变色
- JQuery实现表格隔行换色,鼠标移动变色,点击选择变色
- jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
- 用jquery实现双色表格,鼠标移动到上面时,行变色~!
- javascript学习实录 之七(实现鼠标移动上去后表格颜色变化) -- 刘小小尘