js完美实现table分页

// JavaScript Document
/**
* js分页类
* @param iAbsolute 每页显示记录数
* @param sTableId 分页表格属性ID值,为String
* @param sTBodyId 分页表格TBODY的属性ID值,为String,此项为要分页的主体内容
* @Version 1.0.0
* @author 辛现宝 2007-01-15 created
* var __variable__; private
* function __method__(){};private
*/
function Page(iAbsolute, sTableId, sTBodyId,sPageId) {
    this.absolute = iAbsolute; //每页最大记录数
    this.tableId = sTableId;
    this.tBodyId = sTBodyId;
    this.rowCount = 0; //记录数
    this.pageCount = 0; //页数
    this.pageIndex = 0; //页索引
    this.__oTable__ = null; //表格引用
    this.__oTBody__ = null; //要分页内容
    this.__dataRows__ = 0; //记录行引用
    this.__oldTBody__ = null;
    this.pageId = sPageId;//显示当前页数的span的ID

    this.__init__(); //初始化;
   
};
/*
初始化
*/
Page.prototype.__init__ = function () {
    this.__oTable__ = document.getElementById(this.tableId); //获取table引用
    this.__oTBody__ = this.__oTable__.tBodies[this.tBodyId]; //获取tBody引用
    this.__pageInnerDiv__ = document.getElementById(this.pageId);
    this.__dataRows__ = this.__oTBody__.rows;
    this.rowCount = this.__dataRows__.length;
    try {
        this.absolute = (this.absolute <= 0) || (this.absolute > this.rowCount) ? this.rowCount : this.absolute;
        this.pageCount = parseInt(this.rowCount % this.absolute == 0
? this.rowCount / this.absolute : this.rowCount / this.absolute + 1);
    } catch (exception) { }

    this.__updateTableRows__();
};
/*
下一页
*/
Page.prototype.nextPage = function () {
    if (this.pageIndex + 1 < this.pageCount) {
        this.pageIndex += 1;
        this.__updateTableRows__();
    }
};
/*
上一页
*/
Page.prototype.prePage = function () {
    if (this.pageIndex >= 1) {
        this.pageIndex -= 1;
        this.__updateTableRows__();
    }
};
/*
首页
*/
Page.prototype.firstPage = function () {
    if (this.pageIndex != 0) {
        this.pageIndex = 0;
        this.__updateTableRows__();
    }
};
/*
尾页
*/
Page.prototype.lastPage = function () {
    if (this.pageIndex + 1 != this.pageCount) {
        this.pageIndex = this.pageCount - 1;
        this.__updateTableRows__();
    }
};
/*
页定位方法
*/
Page.prototype.aimPage = function (iPageIndex) {
    if (iPageIndex > this.pageCount - 1) {
        this.pageIndex = this.pageCount - 1;
    } else if (iPageIndex < 0) {
        this.pageIndex = 0;
    } else {
        this.pageIndex = iPageIndex;
    }
    this.__updateTableRows__();
};
/*
执行分页时,更新显示表格内容
*/
Page.prototype.__updateTableRows__ = function () {
    var iCurrentRowCount = this.absolute * this.pageIndex;
    var iMoreRow = this.absolute + iCurrentRowCount > this.rowCount ? this.absolute + iCurrentRowCount - this.rowCount : 0;
    var tempRows = this.__cloneRows__();
    //alert(tempRows === this.dataRows);
    //alert(this.dataRows.length);
    var removedTBody = this.__oTable__.removeChild(this.__oTBody__);
    var newTBody = document.createElement("TBODY");
    newTBody.setAttribute("id", this.tBodyId);

    for (var i = iCurrentRowCount; i < this.absolute + iCurrentRowCount - iMoreRow; i++) {
        newTBody.appendChild(tempRows[i]);
    }
    this.__oTable__.appendChild(newTBody);
    /*
    this.dataRows为this.oTBody的一个引用,
    移除this.oTBody那么this.dataRows引用将销失,
    code:this.dataRows = tempRows;恢复原始操作行集合.
    */
    this.__dataRows__ = tempRows;
    this.__oTBody__ = newTBody;
    //alert(this.dataRows.length);
    //alert(this.absolute+iCurrentRowCount);
    //alert("tempRows:"+tempRows.length);
    document.getElementById(this.pageId).innerHTML = "当前页:" + (this.pageIndex + 1);
};
/*
克隆原始操作行集合
*/
Page.prototype.__cloneRows__ = function () {
    var tempRows = [];
    for (var i = 0; i < this.__dataRows__.length; i++) {
        /*
        code:this.dataRows[i].cloneNode(param), 
        param = 1 or true:复制以指定节点发展出去的所有节点,
        param = 0 or false:只有指定的节点和它的属性被复制.
        */
        tempRows[i] = this.__dataRows__[i].cloneNode(1);
    }
    return tempRows;
};

 

显示使用例子

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <table id="divtable">
                <tbody id="group_one">
                    <tr>
                        <td>
                            54898498
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            4684646
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            4987/7874
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            4654985498
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            74987498/
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            498496496
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                      <tr>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                        <td>
                            123213
                        </td>
                    </tr>
                </tbody>
            </table>
            <span id="s"></span>
            <a href="#" onclick="page.firstPage();">首页</a>


            <a href="#" onclick="page.prePage();">上一页</a>
                    
            <a href="#" onclick="page.nextPage();">下一页</a>
                   
            <a href="#" onclick="page.lastPage();">尾页</a>
                   
            <span id="pageindex"></span>
   <script type="text/javascript">
         $(document).ready(function() {
               page = new Page(3, 'divtable', 'group_one', "pageindex");
         });
          
   </script>
   <script src="JS/JSPager.js" type="text/javascript"></script>
</body>
</html>
 

 

posted @ 2014-07-29 13:26  huanshare  阅读(4658)  评论(0编辑  收藏  举报