JavaScript表格隔行换色悬停高亮

表格隔行换色悬停高亮,网上也有很多方法。但找来找去用着不顺手,自己重新写一个。现在把代码贴出来:一、希望各位高手提提建议。如果能帮我重构下则更好。我总感觉写的不伦不类的!二、希望能帮助到一些朋友。

全部代码如下:

<html>
<head>
    <title>隔行换色——悬停高亮——单击选中</title>
</head>
<script type="text/javascript">
    (function () {
        /*
        *鼠标由表格划过更改表格行的颜色,单击选中并加颜色高亮
        *参数说明:
        *id 必须
        *option对象可选参数
        option.mouseMoveOverColor鼠标划过时候的颜色
        option.mouseOnClickColor鼠标单击后的颜色
        option.oddtrColor 表格奇数行的颜色
        option.eventrColor表格偶数行的颜色
        mouseMoveOverColor和mouseOnClickColor可以任选其一
        例如传参数:1、qhjswSetTableBgcolor("tableid",{mouseMoveOverColor:"#C8E6FF",mouseOnClickColor:"#0066FF"}).start();
          var ts=new qhjswSetTableBgcolor("tableid",{mouseMoveOverColor:"#C8E6FF",mouseOnClickColor:"#0066FF"});
        ts.oddevenOpen=true;//开启隔行换行
        ts..start();
        如果要开启隔行换色把返回对象的oddevenOpen属性改为true
        *作者:bluescreen
        *日期:2012-10-11 14:00
        */
        var qhjswSetTableBgcolor = function (id, option) {
            //判断对象传入的参数是否符合要求
            if (arguments.length < 1 || arguments.length > 2) {
                throw new Error("参数个数不正确");
            }
            if (typeof (id) != "string") {
                throw new Error("ID必须为字符串类型");
            }
            //判断是否使用new关键字进行实例化
            if (this.constructor === window.constructor) {
                return new qhjswSetTableBgcolor(id, option);
            }
            if (typeof (option) != "undefined") {
                if (option.constructor != Object) {
                    throw new Error(option + "不是对象");
                }
            }
            option = option || {}; //如果不存在option对象就赋值一个空对象给option
            var tbobj = document.getElementById(id);
            var trclickindex = "undefined";
            var trclickcolor = null;
            var clicktag = 0;
            this.obj = tbobj;
            this.author = "bluescreen";
            this._len = tbobj.rows.length;
            this.mouseMoveOverColor = option.mouseMoveOverColor || "#C8E6FF";
            this.mouseOnClickColor = option.mouseOnClickColor || "#1e90ff";
            this.oddtrColor = option.oddtrColor || "#fff";
            this.eventrColor = option.eventrColor || "#F5F5F5";
            this.oddevenOpen = false;
            this._gettrclickindex = function () {
                return trclickindex;
            }
            this._settrclickindex = function (index) {
                trclickindex = index;
            }
            this._gettrclickcolor = function () {
                return trclickcolor;
            }
            this._settrclickcolor = function (colorName) {
                trclickcolor = colorName;
            }
            this._setclicktag = function (tag) {
                clicktag = tag
            }
            this._getclicktag = function () {
                return clicktag
            }
        }
        qhjswSetTableBgcolor.prototype = {
            bindMouse: function () {
                var curobj = this;
                for (var i = 0; i < this._len; i++) {
                    this.obj.rows[i].onmouseover = (function (index, tr) {
                        return function () {
                            curobj.tempColor = tr.style.backgroundColor;
                            if (0 != index && tr.clicktag != 1) {
                                curobj.setBgColor(tr, curobj.mouseMoveOverColor);
                            }
                        }

                    })(i, this.obj.rows[i]);
                    this.obj.rows[i].onmouseout = (function (index, tr) {
                        return function () {
                            if (0 != index && tr.clicktag != 1) {
                                curobj.setBgColor(tr, curobj.tempColor);
                            }
                        }

                    })(i, this.obj.rows[i]);
                    this.obj.rows[i].onclick = (function (index, tr) {
                        return function () {
                            if (0 != index && tr.clicktag != 1) {

                                if (curobj._gettrclickindex() != "undefined") {
                                    curobj.setBgColor(curobj.obj.rows[curobj._gettrclickindex()], curobj._gettrclickcolor());
                                    curobj.obj.rows[curobj._gettrclickindex()].clicktag = 0;
                                }
                                curobj._settrclickcolor(curobj.tempColor);
                                curobj.setBgColor(tr, curobj.mouseOnClickColor);
                                curobj._settrclickindex(index);
                                tr.clicktag = 1;
                            }
                        }

                    })(i, this.obj.rows[i]);
                    if (this.oddevenOpen && i != 0) {
                        this.setBgColor(this.obj.rows[i], ((this.obj.rows[i].sectionRowIndex % 2 == 0) ? this.eventrColor : this.oddtrColor));
                    }
                }
            },
            start: function () {
                this.bindMouse();
            },
            getobj: function (id) { //获取指定ID的对象
                return document.getElementById(id);
            },
            setBgColor: function (tr, color) { //设置背景色
                tr.style.backgroundColor = color;
            },
            getBgColor: function (tr) {
                return tr.style.backgroundColor;
            }
        };

        window.qhjswSetTableBgcolor = qhjswSetTableBgcolor;
    })();
    window.onload = function () {
        var ts = qhjswSetTableBgcolor("tabid");
        ts.oddevenOpen = true;
        ts.start();

    };
</script>
<body>
    <table id="tabid">
        <thead>
            <tr style="background-color: Gray;">
                <td>
                    姓名
                </td>
                <td>
                    电话
                </td>
                <td>
                    国籍
                </td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>
                    张三
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    李四
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    王二
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    麻子
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    欧阳夏天
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    司马懿
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    东邪
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    洪七公
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    杨过
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    小龙女
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    神经病
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
            <tr>
                <td>
                    王子
                </td>
                <td>
                </td>
                <td>
                    中国
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

效果如下:

隔行换色——悬停高亮——单击选中

姓名 电话 国籍
张三 13096585211 中国
李四 13096585212 中国
王二 13096585213 中国
麻子 13096585214 中国
欧阳夏天 13096585214 中国
司马懿 13096585215 中国
东邪 13096585216 中国
洪七公 13096585217 中国
杨过 13096585219 中国
小龙女 13096585220 中国
神经病 13096585221 中国
王子 13096585222 中国
原文地址:https://www.cnblogs.com/bluescreen/p/2721246.html