• GridView实现跟随鼠标移动及单击高亮显示


    看着一些表格带那些鼠标移动过去的时候会触发tr的背景颜色发生变化,当你单击某一行时,它还能以高亮的颜色显示你单击中了哪一条,相当羡慕的说啊!!!
    网上面也有很多的例子,有通过C#代码的Attribute方法绑定,也有直接写JS实现的,由于觉得在服务器端实现会浪费资源(虽然很小),所以哥哥我就想在JS那里写一下,至于怎么实现,我会一步一步的把过程写出来,不着急,哈。

    1、实现鼠标经过tr时,触发行的背景色发生变化,一开始的念头是通过onmouseover 和 onmouseout 来实现的,于是就写了下面一段出来(Gridview的ID值是 gvE4,下同)

    1 $("#gvE4").find("tr").attr("onmousemove","c=this.style.backgroundColor;this.style.backgroundColor='#DFF8FF'");
    2 $("#gvE4").find("tr").attr("onmouseout","this.style.backgroundColor=c");

    思路是上我觉得是没问题的,但最后却没有反应,于是百度了一下,找到了另外一个办法,如下:

    1 $("#gvE4 tr").hover(
    2                 function(){$(this).addClass("hover");},
    3                 function(){$(this).removeClass("hover");}
    4             );

    这个写法很漂亮,也实用,原理简单说一下,通过设定tr的hover事件,hover(function(){},function(){})里面的第一个function是鼠标经过时触发的,第二个function是鼠标离开时触发的,而里面所执行的就是通过经过与离开时,动态绑定或去掉一个class属性,而这个hover类的话,在下面:

    1 <style type="text/css">
    2         .hover{background-color:#DFF8FF; font-weight:bold;} /*这里是鼠标经过时的颜色*/
    3 </style>

    这样,第一个功能已经实现了。

    2、当鼠标单击的时候,怎么样使得被单击的一行高亮显示呢??要做到两点:单击的那一行高亮显示、其它行要去掉高亮效果。

    那要做到这两步的话,有一个简单的方法:先把所有的行数都去掉高亮,然后再为被单击的那一行添加高亮效果,代码如下:

    1             $("#gvE4 tr td").click(function(){         
    2                 $(this).parent().parent().find("tr").attr("style","height:28px;");
    3                 $(this).parent().attr("style","height:28px;background-color:#DFF8FF; font-weight:bold;");
    4             });

    这样子以后,当鼠标单击某一行时,它就会被高亮显示出来,但是,令人蛋疼的是,由于GridView的分页功能,它的页脚那里鼠标经过或被单击时,也会以高亮显示,见下图(最底部):

    图一、分页下方也被高亮显示了

    这样的效果真的会让人看得蛋疼,于是反复的看了一下jquery的手册,想办法只选中前面几个tr,而把最后一行tr排除在外就行了,于是看到过last,也看到过eq的用法,最后又看到了lt,一翻偿试后,发现lt能够解决这个办法,但也不能一劳永逸,先看看代码我再说一下吧。

    由于我是选解决那个鼠标移动时的问题再解决单击时产生的问题,所以我先说说第一个解决办法:

    1) 都晓得,css属性background-color与直接定义标签的background-color属性的优先级别不一样的,实验证明,内置的属性优先级别要比css那个高,所以,只要我把它的背景颜色直接设置为白色,那么无论它怎么通过addClass或removeClass都不会影响到它的外观,嘿嘿,于是嘛,直接在gridview的属性栏把分页的背景设成白色了,然后运行看,鼠标移动过去时,木有变化,哈哈,设置的传送门在下面:

    图二、设置分页的背景颜色,直接回避该问题

    2) 当然,会了第二个方法的话,第一个可以不鸟它,咱们用点高深点的办法,就是上面我提到过的lt那个jquery选择器了,我不说太多,真接上代码:

    1             $("#gvE4 tr td").click(function(){
    2                 $(this).parent().parent().find("tr:lt(11)").attr("style","height:28px;");
    3                 $(this).parent().attr("style","height:28px;background-color:#DFF8FF; font-weight:bold;");
    4             });

    有看懂那个find("tr:lt(11)")吗?先看看lt()的用法,直接翻译过来就是:选中前11个tr标签。为什么会是11呢?这个就是我上面说的不是一个一劳永逸的办法,首先,1是那个表格的标题行,而剩下的10是我的分页记录数,我设成是10了,所以前11的肯定不会选中那一行分页栏,至此,运行一下,嘿嘿,还有问题。。。单击分页栏时,还是会高亮显示,尼玛,这不白忙吗。。。于是一通检查,终于发现,第一句没事了,出事就出在第二句:它不会识别你当前点的是哪一行,还会自动着色,我了个去了,于是又陷入苦想,怎么样区别它呢???打开网页源代码发现,分页那一栏嵌入了一个一行N列的表格table,既然这样,哥哥又想到办法了,单击时,判断一下该行是不是有嵌一个表格来判断是否是分页栏位,如下:

    1             $("#gvE4 tr td").click(function(){
    2                 $(this).parent().parent().find("tr:lt(11)").attr("style","height:28px;");
    3                 if($(this).find("tr").length == 0 ){
    4                     $(this).parent().attr("style","height:28px;background-color:#DFF8FF; font-weight:bold;");
    5                 }
    6             });

    至此,整个功能做出来了,感觉又学到点东西了,先记下来,以后不会还能回过头来看看

    PS:上面可能写得不算好,各位借鉴时请谨慎,另外,有砖丢砖,没砖打赏点也行~~

      

     1     <script language="javascript" type="text/javascript">
     2         $(document).ready(function(){
     3             $("#ShowListInfo").attr("style","display:none;");
     4             $("#btnBack").attr("style","display:none;");
     5 //            $("#gvE4").find("tr").attr("onmousemove","c=this.style.backgroundColor;this.style.backgroundColor='#DFF8FF'");
     6 //            $("#gvE4").find("tr").attr("onmouseout","this.style.backgroundColor=c");
     7             $("#gvE4 tr").hover(
     8                 function(){$(this).addClass("hover");},
     9                 function(){$(this).removeClass("hover");}
    10             );
    11             $("#gvE4 tr td").click(function(){
    12                 //由于GridView是以10條記錄為一頁,算上表格標題和分頁的那一行的話,如果出現分頁,則本表格tr行數應超過11行,否則就沒有分行,故可以此作為一個判斷標准。
    13                 $(this).parent().parent().find("tr:lt(11)").attr("style","height:28px;");
    14                 if($(this).find("tr").length == 0 ){
    15                     $(this).parent().attr("style","height:28px;background-color:#DFF8FF; font-weight:bold;");
    16                 }
    17             });
    18             
    19 //            
    20 //            $("#gvE4 tr td").click(function(){
    21 //                var e = $(this).parent();              
    22 //                $(this).parent().parent().find("tr").attr("style","border-color:White;border-0px;height:28px;");
    23 //                $(this).parent().attr("style","border-color:White;border-0px;height:28px;background-color:#DFF8FF; font-weight:bold;");
    24 //            });
    25             
    26         });
    27     </script>
    28     <style type="text/css">
    29         .hover{background-color:#DFF8FF; font-weight:bold;} /*这里是鼠标经过时的颜色*/
    30         #gvE4 table tr td
    31         {
    32             background-color:#FFFFFF;
    33             font-weight:normal;
    34         }
    35         th
    36         {
    37             background-color:#FFFFFF;
    38             background-image:url(images/win_top.png);
    39             height: 26px;
    40             font-weight:bold;
    41             color: #FFF;
    42         }
    43         .style1
    44         {
    45             width: 100%;
    46         }
    47     </style>
  • 相关阅读:
    Spring 中PageHelper分页插件使用
    手写Spring框架学习笔记
    Spring 集成Junit单元测试
    创建产品服务工程
    Oracle 常用SQL语句
    解决The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
    微服务如何拆分
    Eureka的高可用
    Eureka Client的使用
    Spring Cloud Eureka Server使用(注册中心)
  • 原文地址:https://www.cnblogs.com/seasons1987/p/2658658.html
Copyright © 2020-2023  润新知