var tableCombin = function (table, splitChar) {
    this.table = table;
    this.splitChar = splitChar;
};
tableCombin.prototype = {
    //合并单元格
    combineTableHeader: function () {
        var tb = this.table;
        if (tb) {
            var header = tb.rows[0];
            var endIndex = header.cells.length;            //获取Y轴最大值
            var maxY = 1, tmpLen = 1;
            for (var i = 0; i < endIndex; i++) {
                tmpLen = header.cells[i].innerHTML.split(this.splitChar).length;
                if (tmpLen > maxY)
                    maxY = tmpLen;
            }            //给header赋值
            if (maxY > 1) {
                var newRows = [];
                var tmpRow;
                var tmpTH;
                var tmpTHContent;
                for (var i = 1; i < maxY; i++) {
                    tmpRow = newRows[i] = tb.insertRow(0);
                    for (var j = 0; j < endIndex; j++) {
                        tmpTH = this.insertTH(tmpRow);
                        tmpTH.innerHTML = header.cells[j].innerHTML;
                    }
                }
                newRows[0] = header;                //Y方向分割单元格
                for (var i = 0; i < maxY; i++) {
                    tmpRow = newRows[i];
                    endIndex = tmpRow.cells.length;
                    for (var j = endIndex; j >= 0; j--) {
                        tmpTH = tmpRow.cells[j];
                        if (typeof (tmpTH) != 'undefined') {
                            tmpTHContent = tmpTH.innerHTML.split(this.splitChar);
                            if (tmpTHContent.length == 1) {
                                if (i == (maxY - 1)) {
                                    tmpTH.rowSpan = maxY;
                                }
                                else {
                                    tmpTH.setAttribute('delete', '1');
                                }
                            }
                            else {
                                if (typeof (tmpTHContent[maxY - i - 1]) != 'undefined') {
                                    tmpTH.innerHTML = tmpTHContent[maxY - i - 1];
                                }
                                else {
                                    if (i + 1 < maxY) {
                                        newRows[i + 1].cells[j].rowSpan = (i + 2);
                                        tmpTH.setAttribute('delete', '1');
                                    }
                                    else {
                                        tmpTH.innerHTML = "";
                                    }
                                }
                            }
                        }
                    }
                }                //X轴合并
                this.XCombine(newRows, "TH");                //删除 标志 为delete的td
                this.deleteFlag(newRows, "TH");
            }
        }
    },
    combinTD: function () {
        var tb = this.table;
        if (tb) {
            //Y轴合并
            this.YCombine(tb.rows, "TD", [tb.rows - 1]);            var Ymax = tb.rows.length;
            //X轴合并
            this.XCombine(tb.rows, "TD");            //删除 标志 为delete的td
            this.deleteFlag(tb.rows, "TD");
        }
    },
    insertTH: function (row) {
        var th = document.createElement("th");
        row.appendChild(th);
        return th;
    },
    YCombine: function (rows, tagName, filterIndexArr) {
        if (typeof (tagName) == "undefined")
            tagName = "TD";
        if (typeof (filterIndexArr) == "undefined")
            filterIndexArr = [];
        var Ymax = rows.length;
        var tmpRow, tmpTD, tmpContent, comRow, comTD;
        for (var i = 0; i < Ymax && !this.eleIsInArr(filterIndexArr, i); i++) {
            tmpRow = rows[i];
            for (var k = 0; k < tmpRow.cells.length; k++) {
                tmpRow = rows[i];
                tmpTD = tmpRow.cells[k];
                if (tmpTD.tagName == tagName) {
                    tmpContent = tmpTD.innerHTML;
                    var j = i + 1;
                    for (; j < Ymax - 1 && !this.eleIsInArr(filterIndexArr, i); j++) {
                        comRow = rows[j];
                        comTD = comRow.cells[k];
                        if (typeof (comTD) != 'undefined' && comTD.tagName == tagName && tmpContent != comTD.innerHTML) {
                            break;
                        }
                    }
                    if (j - i > 1) {
                        rows[i].cells[k].rowSpan = (j - i);
                        for (var m = i + 1; m < j; m++) {
                            if (typeof (rows[m].cells[k]) != "undefined")
                                rows[m].cells[k].setAttribute('delete', '1');
                        }
                    }
                }
            }
        }
    },
    XCombine: function (rows, tagName) {
        if (typeof (tagName) == "undefined")
            tagName = "TD";
        var Ymax = rows.length;
        for (var i = 0; i < Ymax; i++) {
            var j = 0;
            tmpRow = rows[i];
            var endIndex = tmpRow.cells.length;
            while (j < endIndex) {
                tmpTD = tmpRow.cells[j];
                if (typeof (tmpTD) != "undefined" && tmpTD.getAttribute("delete") != "1") {
                    var k = j + 1;
                    for (; k < endIndex; k++) {
                        if (typeof (tmpRow.cells[k]) != "undefined") {
                            if (tmpRow.cells[k].innerHTML != tmpTD.innerHTML)
                                break;
                        }
                    }
                    if ((k - j) > 1) {
                        tmpTD.colSpan = (k - j);
                        for (var m = j + 1; m < k && typeof (tmpRow.cells[m]) != "undefined"; m++) {
                            tmpRow.cells[m].setAttribute('delete', '1');
                        }
                    }
                }
                j++;
            }
        }
    },
    deleteFlag: function (rows, tagName) {
        if (typeof (tagName) == "undefined")
            tagName = "TD";
        var Ymax = rows.length;
        for (var i = 0; i < Ymax; i++) {
            tmpRow = rows[i];
            for (var k = tmpRow.cells.length - 1; k >= 0; k--) {
                tmpTD = tmpRow.cells[k];
                if (tmpTD.tagName == tagName && tmpTD.getAttribute("delete") == "1") {
                    tmpTD.parentNode.removeChild(tmpTD);
                }
            }
        }
    },    eleIsInArr: function (arr, ele) {
        if (arr.length == 0)
            return true;
        for (var i in arr) {
            if (arr[i] == ele)
                return true;
        }
        return false;
    }
};请问大家,我这样的写法是不是不好。
别人看不懂,应该这样去写。function InitGridView(oGridview, sDataSeparator, iDataKeyCount) {
if (oGridview == null)
        return null;    oGridview["sDataSeparator"] = sDataSeparator;
    oGridview["iDataKeyCount"] = iDataKeyCount;    oGridview.getGridViewCheckedBox = function () {
        if (document.getElementById(this.id) != null)
            return document.getElementById(this.id).getElementsByTagName('input');
        else
            return document.getElementsByTagName('input');
    }    oGridview.isGridViewCheckedBox = function (oCheckedBox) {
        return (typeof (oCheckedBox.selectItemFor) != "undefined" && this.id.indexOf(oCheckedBox.selectItemFor) != -1);
    }
return oGridview ;
}