兼容ie6及以上和firefox等标准浏览器的表格行滑过时背景色切换的效果
一、js代码——"tablehover.js"
/**
*②、表格单元行滑过时高亮样式动效组件封装
*oop形式封装交互动效类
*组件说明这个组件是为了向下兼容到IE6,因为IE6不支持tr:hover这种形式的伪类,而在ff等标准浏览器中是支持的,这样写:
.tablelist td{border:none;border-bottom: 1px solid #d0d9d9;}//注意:td初始状态下是不给背景色的,滑过时才写
所以这段组件代码要开IETest6的环境下测试
.tablelist tr:hover td{background: #e2f3fe;color: #2d9ff1;}
*@param tableid 表格对象的上下文环境
*@param tdColor 滑过时单元格内字体的颜色值
*@param rowBgColor滑过时表格行背景色
*@param tdColorDefault 非滑过时单元格内字体的颜色
*@param rowBgColorDefault 非滑过状态下表格行背景色
*@param 或传入table对象 里面的配置属性写法是
*var tabdom = {// 配置对象的各个参数即可,再不用往构造器中传一堆参数了
tableid:'tablelist',
hovercolor:'#2d95f1',
hoverbgcolor:'#e2f3fe',
defaultcolor:'#333',
defaultbgcolor:'#fff'
};
*其整体调用写法是:
*var tb = new TableRowHover(tabdom);
// alert(tb instanceof TableRowHover);true证明tb是TableRowHover类的实例
tb.togglerow();
*
**/
function TableRowHover(table){
this.tableId = typeof table.tableid == 'string'?document.getElementById(table.tableid) : table.tableid;
// if (this.tableId) {alert(this.tableId)};//弹出[objectdivelement],证明获取到了父table节点了
this.tdColor = table.hovercolor;
this.rowBgColor = table.hoverbgcolor;
this.tdColorDefault = table.defaultcolor;
this.rowBgColorDefault = table.defaultbgcolor;
};
TableRowHover.prototype = {
togglerow:function(){
var that = this;
// alert(this.tableId.rows.length);
for(var i = 1;i<this.tableId.rows.length;i++){
var row = this.tableId.rows[i];
// console.log(row);
if (document.addEventListener) {//ff
// console.log(this.tableId.rows.length);//进来了
row.addEventListener('mouseover',function(e){
var ev = e || window.event; //注意:这里的写法,事件对象的获取只在事件紧跟着触发的事件句柄函数里面才能获取的到(生效),在句柄函数的子函数里面等情况是获取不到的,一定要注意这个坑,正确做法就是,现在父句柄函数里面获取到事件对象,再通过传参传入到子函数中即可
that.setRowColor(that,ev);
},false);
row.addEventListener('mouseout',function(e){
var ev = e || window.event;
that.setDefaultRowColor(that,ev);
},false);
} else if(document.attachEvent) {//IE6
// alert(this.tableId.rows.length);//这也进来了
row.attachEvent('onmouseover',function(e){
var ev = e || window.event;
that.setRowColor(that,ev);//这样传值后IE6终于搞定了
});
row.attachEvent('onmouseout',function(e){
var ev = e || window.event;
that.setDefaultRowColor(that,ev);
});
} else{
row.onmouseover = function(e){
var ev = e || window.event;
that.setRowColor(that,ev);
}
row.onmouseout = function(e){
var ev = e || window.event;
that.setDefaultRowColor(that,ev);
}
}
}
},
setRowColor:function(parent,ev){//传值设置表格行颜色
// console.log(parent.rowBgColor);//ok搞定,就是这样的父元素this引用的问题,在这里this看不见,只有当参数传进来才能引用父构造器里面的颜色属性
src = ev.srcElement || ev.target;
if (src.tagName == 'TD') {
src.parentNode.style.backgroundColor = parent.rowBgColor;
var tds = src.parentNode.getElementsByTagName('td');
for(var i = 0;i<tds.length;i++){
tds[i].style.color = parent.tdColor;
}
};
},
setDefaultRowColor:function(parent,ev){//传值设置表格行颜色
// console.log(parent.rowBgColorDefault);//进来了
src = ev.srcElement || ev.target;
if (src.tagName == 'TD') {
src.parentNode.style.backgroundColor = parent.rowBgColorDefault;
var tds = src.parentNode.getElementsByTagName('td');
for(var i = 0;i<tds.length;i++){
tds[i].style.color = parent.tdColorDefault;
}
};
}
}
[解析]:
1、第一个坑:row.addEventListener('mouseover',function(e){
var ev = e || window.event;
//注意:这里的写法,事件对象e的获取只在事件紧跟着触发的事件句柄函数里面才能获取的到(生效),在句柄函数的 子函数里面等情况是获取不到的,一定要注
意这个坑,正确做法就是,现在父句柄函数里面获取到事件对象,再通过传参传入到子函数中即可
that.setRowColor(that,ev);
最后在子函数里面获取事件源对象ev.srcElement,这是可以的
setRowColor:function(parent,ev){
src = ev.srcElement || ev.target;
...
2、第二个坑:就是父构造器的this指向的问题。
一般来说,父构造器中的this.属性在其原型的方法里面是能够直接看到并被引用的。
但是一旦遇到了事件触发,并需要再其事件的句柄函数中引用构造器this,那么这就不好使了,因为事件的句柄函数中的this默认是指向触发事件的元素的
togglerow:function(){
var that = this;
这时的解决办法只有将构造器this对象存入一个变量中,如上面的that,用that变量指向构造器的this,来调用构造器中定义的属性和原型方法
row.addEventListener('mouseover',function(e){
var ev = e || window.event;
that.setRowColor(that,ev);
},false);
3、优化:就是配置参数对象了,与其向构造器中传一长串参数,不如只传一个配置对象,如:*var tabdom = {// 配置对象的各个参数即可,再不用往构造器中传一堆参数了
tableid:'tablelist',
hovercolor:'#2d95f1',
hoverbgcolor:'#e2f3fe',
defaultcolor:'#333',
defaultbgcolor:'#fff'
};
*其整体调用写法是:
*var tb = new TableRowHover(tabdom);
那么构造器那边获取就这样写:
function TableRowHover(table){
this.tableId = typeof table.tableid == 'string'?document.getElementById(table.tableid) : table.tableid;
this.tdColor = table.hovercolor;
this.rowBgColor = table.hoverbgcolor;
this.tdColorDefault = table.defaultcolor;
this.rowBgColorDefault = table.defaultbgcolor;
};
二、html部分(验证上面js封装的效果)
<!-- 主体部分 -->
<div class="listfile">
<h1 class="list-title">文件草稿列表</h1>
<div class="btn-group clearfix">
<ul class="clearfix">
<li><a href="" style="background:#3091f0;color:#fff;"><i class="add-icon"></i><span class='icon-txt'>新增</span></a></li>
<li><a href="">修改</a></li>
<li><a href="">删除</a></li>
<li><a href="">送盖章</a></li>
<li><a href="">查询</a></li>
</ul>
<span style="display:inline-block;height:34px;line-height:34px;padding-left:20px;color:#333;">当前显示的是2016-2-29后的公文,查询之前的公文请点击"查询"按钮</span>
</div>
<table border="0" cellspacing="0" cellpadding="0" class="tablelist" id="tablelist">
<colgroup>
<col class="col1" />
<col class="col2" />
<col class="col3" />
<col class="col4" />
<col class="col5" />
</colgroup>
<thead>
<tr>
<th><input type="checkbox" /></th>
<th>文号</th>
<th>标题</th>
<th>发文单位</th>
<th>登记时间</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>某某某2016aaaaaaaa</td>
<td>湖北某某某企业某某某文件</td>
<td>某某某某某某某某某企业</td>
<td>2016-3-3 10:00:00</td>
</tr>
</tbody>
</table>
<div class="pagebg">
<div class="page">
<ul class="clearfix">
<li class="pre_next"><a href="" class="pre_next">上一页</a></li>
<li><a href="">1</a></li>
<li><a href="">2</a></li>
<li><a href="">3</a></li>
<li><a href="">4</a></li>
<li><a href="">5</a></li>
<li><a href="">6</a></li>
<li class="pre_next"><a href="" class="pre_next">下一页</a></li>
</ul>
</div>
</div>
</div>
.
.
.
<script type="text/javascript" src="./tablehover.js"></script>
<script type="text/javascript">
var tabdom = {//配置对象的各个参数即可,再不用往构造器中传一堆参数了
tableid:'tablelist',
hovercolor:'#2d95f1',
hoverbgcolor:'#e2f3fe',
defaultcolor:'#333',
defaultbgcolor:'#fff'
};
var tb = new TableRowHover(tabdom);
// alert(tb instanceof TableRowHover);true证明tb是TableRowHover类的实例
tb.togglerow();
</script>
兼容ie6及以上和firefox等标准浏览器的表格行滑过时背景色切换的效果的更多相关文章
- 兼容ie6及以上的表格行滑过时背景色切换的效果
;(function(window){ var tb = document.getElementById('tablelist'); function trfocus(){//为了兼容IE ...
- 图片水平垂直居中(兼容IE6,IE7,firefox,opera,safari,其中图片可以是任何块元素)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 在页面左右一个悬浮div兼容IE6 IE7 8 9 Firefox chrome
在页面左右一个悬浮div兼容IE6 IE7 8 9 Firefox chrome #identifier-pannel { bottom: 345px; margin-left: 512px; pos ...
- CSS兼容IE6 IE7 IE8 IE9 Firefox的总结
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 网页重构中区分IE6、IE7、IE8及标准浏览器的最佳方法
由于万恶的IE6和IE7,我们在页面重构时不免要对其进行各种bug修复及差异化处理.在标准浏览器中可实现的效果在IE里却有各种离奇问题,例如IE6.IE7不能良好应对的inline-block和.cl ...
- 七行jquery代码实现图片渐变切换【兼容ie6+、 Chrome、 Firefox】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ie6 7 8 9 firefox的css兼容问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 最新区分兼容IE6/IE7/IE8/IE9/FF的CSS HACK写法和Css if hack条件语法操作说明
自从安装了IE8.0正式版本!木头 就对基本的几个 CSS HACK的做一下归纳!希望对网页前端布局DIV+CSS的实施者有所帮助! 本文就主要以:IE6+IE7+IE8+IE9+FF为主要研究对象 ...
- 区分兼容IE6/IE7/IE8/IE9/FF的CSS HACK写法
HACK原理:不同浏览器对各中字符的识别不同 在 CSS中常用特殊字符识别表: (1)*: IE6+IE7都能识别*,而标准浏览器FF+IE8是不能识别*的; (2)!important: 除IE6 ...
随机推荐
- windows编程:创建DLL
创建DLL Dll是动态链接库的缩写,可以作为附加代码动态映射到进程的地址空间中. 动态库的一般创建方法如下 方法1.使用 __declspec(dllexport) 方式导出 一般的框架如下 // ...
- 使用Dreamweaver格式化HTML代码
今天偶然发现了DreamWeaver(DW)的一个非常有用的功能,就是代码的格式化功能.一般情况下,我们写的html或者css代码都计较混乱,难以阅读,即使刚开始很在意代码的可读性,但是等到所使用的标 ...
- codeforces 492E. Vanya and Field(exgcd求逆元)
题目链接:codeforces 492e vanya and field 留个扩展gcd求逆元的板子. 设i,j为每颗苹果树的位置,因为gcd(n,dx) = 1,gcd(n,dy) = 1,所以当走 ...
- SqlServer拆分列
SELECT TOP 1000 substring([a],0,CHARINDEX('/',a)) as low,substring([a],CHARINDEX('/',a)+1,len([a])-C ...
- PAT (Advanced Level) 1018. Public Bike Management (30)
先找出可能在最短路上的边,图变成了一个DAG,然后在新图上DFS求答案就可以了. #include<iostream> #include<cstring> #include&l ...
- HDU 1540 POJ 2892 Tunnel Warfare
线段树 区间合并 单点修改 区间查询.又是1秒钟构思,差错查了好久... ... 发现一个int型的定义成了char型,打脸. #include <stdio.h> #include &l ...
- oracle 函数的创建和调用
以下已经测试通过 创建函数: create or replace function get_annual_sal(in_name varchar2) return number is annual_s ...
- php 中的全局变量的理解
$GLOBALS 是php中的一个全局变量的数组. $GLOBALS['var1'] 代表的是 外部的全局变量 $var1 本身.global $var是外部$var的同名引用或者指针 例1: &l ...
- [Programming WCF Services]Chapter 1. WCF Essentials - EndPoint
1.配置文件方式设置EndPoint(ABC) 1.1.基本配置 <system.serviceModel> <services> <service name=" ...
- 前台html与后台php通信(上传文件)
这部分为导入txt文本文件,存放在服务器然后返回txt文本的内容到前台进行相应操作 前台html代码 <div id="coordinate_div"> ...