JS实现表格分页,排序,模糊搜索

 整个的功能分为三个部分,都是来自不同的前辈们贡献的资源,整合在了一起,虽然还是有些繁琐,但是可以使用^_^

分页的资源来自:https://blog.csdn.net/xuaner8786/article/details/79468546 雪梅冷落前辈

排序的资源来自:https://www.cnblogs.com/doseoer/p/5638533.html      Leone-前辈

模糊搜索不记得来自哪里了.....下面是整个的代码,html如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script src="js/jquery.min.js"></script>
    <script src="js/some.js"></script>
    <style type="text/css">
        * { padding: 0; margin: 0; }
        body { font-family: verdana; font-size: 12px; }
        .content { width: 550px; margin: 20px auto; }
        .content h1 { font-family: '微软雅黑'; font-size: 18px; padding-bottom: 5px; }
        table { width: 100%; }
        th, td { padding: 6px 0px; text-align: center; width:auto;}
        th { background-color: #1283af; color: #ffffff; }
        .even { background-color: #e8eeff; }
        .odd { background-color: #f5f5f5; }
        .highlight { background-color: #FFF3EE; }
        .span6{ float:inherit; margin:10px; }
        #pagiDiv span{ background:#1e90ff; border-radius: .2em; padding:5px; }
        .zd_one{padding-top:5px;}
        .zd_two{color:#1283af;}
    </style>
    <script>
        window.onload=function(){
            //页面标签变量
            blockTable = document.getElementById("blocks");
            preSpan = document.getElementById("spanPre");
            firstSpan = document.getElementById("spanFirst");
            nextSpan = document.getElementById("spanNext");
            lastSpan = document.getElementById("spanLast");
            pageNumSpan = document.getElementById("spanTotalPage");
            currPageSpan = document.getElementById("spanPageNum");

            numCount = document.getElementById("blocks").rows.length - 1;       //取table的行数作为数据总数量(减去标题行1)
            columnsCounts = blockTable.rows[0].cells.length;
            pageCount = 5;//控制每页显示条数
            pageNum = parseInt(numCount/pageCount);
            if(0 != numCount%pageCount){
                pageNum += 1;
            }

            firstPage();
        };
        $(function(){
            //回车事件绑定
            $('#myInput').bind('keyup', function(event) {
                if (event.keyCode == "13") {
                    // 声明变量
                    var input, filter, table, tr, td, i,tds;
                    input = document.getElementById("myInput");
                    filter = input.value.toUpperCase();
                    table = document.getElementById("blocks");
                    tr = table.getElementsByTagName("tr");
                    //if(input.value!="" && input.value != null){//控制模糊搜索时 是否允许空格搜索
                        for(var a =0; a<tr.length;a++){
                            tds = tr[a].getElementsByTagName("td");
                            for (var i =0;i< tds.length ; i++) {
                                var thval = tds[i].outerText;
                                if (thval.toUpperCase().indexOf(filter)!=-1){//不存在时返回-1   !=-1就是存在
                                    tr[a].style.display = "";
                                    break;
                                }else{
                                    tr[a].style.display = "none";
                                }
                            }
                        }
                    //}//控制模糊搜索时 是否允许空格搜索
                }
            });
        });
    </script>
</head>
<body align="center">
<div class="container zd_one" align="center" style="height:300px;">
    <h2 align="left" class="zd_two">员工信息</h2>
    <input type="text" id="myInput" placeholder="搜索..."/><!--  onblur="myFunction()" -->
    <span style="color:red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回车键进行搜索~</span>
    <table id="blocks" class="table table-striped" style="margin-top:5px">
        <thead><!--summary="user infomation table" id="tableSort"-->
            <tr>
                <th onclick="$.sortTable.sort('blocks',0)" style="cursor: pointer;">会员ID</th>
                <th onclick="$.sortTable.sort('blocks',1)" style="cursor: pointer;">会员名</th>
                <th onclick="$.sortTable.sort('blocks',2)" style="cursor: pointer;">邮箱</th>
                <th onclick="$.sortTable.sort('blocks',3)" style="cursor: pointer;">会员组</th>
                <th onclick="$.sortTable.sort('blocks',4)" style="cursor: pointer;">城市</th>
                <th onclick="$.sortTable.sort('blocks',5)" style="cursor: pointer;">注册时间</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>15632</td>
                <td>sdfhHjg</td>
                <td>este@126.com</td>
                <td>银卡会员</td>
                <td>河南</td>
                <td>2017-06-12</td>
            </tr>
            <tr>
                <td>3659</td>
                <td>mnxbs</td>
                <td>sloea@659.com</td>
                <td>铂金会员</td>
                <td>上海</td>
                <td>2015-06-23</td>
            </tr>
            <tr>
                <td>126</td>
                <td>webw3c</td>
                <td>este@126.com</td>
                <td>普通会员</td>
                <td>北京</td>
                <td>2011-04-13</td>
            </tr>
            <tr>
                <td>145</td>
                <td>test001</td>
                <td>test001@126.com</td>
                <td>中级会员</td>
                <td>合肥</td>
                <td>2011-03-27</td>
            </tr>
            <tr>
                <td>116</td>
                <td>wuliao</td>
                <td>wuliao@126.com</td>
                <td>普通会员</td>
                <td>南昌</td>
                <td>2011-04-01</td>
            </tr>
            <tr>
                <td>129</td>
                <td>tired</td>
                <td>tired@126.com</td>
                <td>中级会员</td>
                <td>北京</td>
                <td>2011-04-06</td>
            </tr>
            <tr>
                <td>155</td>
                <td>tiredso</td>
                <td>tireds0@126.com</td>
                <td>中级会员</td>
                <td>武汉</td>
                <td>2011-04-06</td>
            </tr>
            <tr>
                <td>131</td>
                <td>javascript</td>
                <td>js2011@126.com</td>
                <td>中级会员</td>
                <td>武汉</td>
                <td>2011-04-08</td>
            </tr>
            <tr>
                <td>1356</td>
                <td>aaa</td>
                <td>test@126.com</td>
                <td>金卡会员</td>
                <td>上海</td>
                <td>2018-05-23</td>
            </tr>
            <tr>
                <td>2563</td>
                <td>jQuery</td>
                <td>jQuery@126.com</td>
                <td>高级会员</td>
                <td>北京</td>
                <td>2011-04-12</td>
            </tr>
            <tr>
                <td>13d2</td>
                <td>jQuery</td>
                <td>wer@1d26.com</td>
                <td>普通会员</td>
                <td>重庆</td>
                <td>2005-12-10</td>
            </tr>
            <tr>
                <td>32433</td>
                <td>5645</td>
                <td>235sdfs@126.com</td>
                <td>铂金卡会员</td>
                <td>山东</td>
                <td>2010-12-01</td>
            </tr>
        </tbody>
    </table>

    <div id="pagiDiv" align="right" style="width:95%">
        <span id="spanFirst">First</span>
        <span id="spanPre">Pre</span>
        <span id="spanNext">Next</span>
        <span id="spanLast">Last</span>
        The <span id="spanPageNum"></span> Page/Total <span id="spanTotalPage"></span> Page
    </div>

</div>
</body>
</html>

JS 如下:

/*
* @Author: Marte
* @Date:   2018-10-23 17:40:57
* @Last Modified by:   Marte
* @Last Modified time: 2018-10-23 18:12:04
*/

'use strict';
//禁止页面滚动
var numCount;       //数据总数量
var columnsCounts;  //数据列数量
var pageCount;      //每页显示的数量
var pageNum;        //总页数
var currPageNum ;   //当前页数

//页面标签变量
var blockTable;
var preSpan;
var firstSpan;
var nextSpan;
var lastSpan;
var pageNumSpan;
var currPageSpan;
/**首页**/
function firstPage(){
    hide();
    currPageNum = 1;
    showCurrPage(currPageNum);
    showTotalPage();
    for(var i = 1; i < pageCount + 1; i++){
        blockTable.rows[i].style.display = "";
    }

    firstText();
    preText();
    nextLink();
    lastLink();
}
/**前一页**/
function prePage(){
    hide();
    currPageNum--;
    showCurrPage(currPageNum);
    showTotalPage();
    var firstR = firstRow(currPageNum);
    var lastR = lastRow(firstR);
    for(var i = firstR; i < lastR; i++){
        blockTable.rows[i].style.display = "";
    }

    if(1 == currPageNum){
        firstText();
        preText();
        nextLink();
        lastLink();
    }else if(pageNum == currPageNum){
        preLink();
        firstLink();
        nextText();
        lastText();
    }else{
        firstLink();
        preLink();
        nextLink();
        lastLink();
    }

}
/**下一页**/
function nextPage(){
    hide();
    currPageNum++;
    showCurrPage(currPageNum);
    showTotalPage();
    var firstR = firstRow(currPageNum);
    var lastR = lastRow(firstR);
    for(var i = firstR; i < lastR; i ++){
        blockTable.rows[i].style.display = "";
    }

    if(1 == currPageNum){
        firstText();
        preText();
        nextLink();
        lastLink();
    }else if(pageNum == currPageNum){
        preLink();
        firstLink();
        nextText();
        lastText();
    }else{
        firstLink();
        preLink();
        nextLink();
        lastLink();
    }
}
/**尾页**/
function lastPage(){
    hide();
    currPageNum = pageNum;
    showCurrPage(currPageNum);
    showTotalPage();
    var firstR = firstRow(currPageNum);
    for(var i = firstR; i < numCount + 1; i++){
        blockTable.rows[i].style.display = "";
    }

    firstLink();
    preLink();
    nextText();
    lastText();
}

// 计算将要显示的页面的首行和尾行
function firstRow(currPageNum){
    return pageCount*(currPageNum - 1) + 1;
}

function lastRow(firstRow){
    var lastRow = firstRow + pageCount;
    if(lastRow > numCount + 1){
        lastRow = numCount + 1;
    }
    return lastRow;
}

function showCurrPage(cpn){
    currPageSpan.innerHTML = cpn;
}

function showTotalPage(){
    pageNumSpan.innerHTML = pageNum;
}
//隐藏所有行
function hide(){
    for(var i = 1; i < numCount + 1; i ++){
        blockTable.rows[i].style.display = "none";
    }
}

//控制首页等功能的显示与不显示
function firstLink(){firstSpan.innerHTML = "<a href='javascript:firstPage();'>First</a>";}
function firstText(){firstSpan.innerHTML = "First";}

function preLink(){preSpan.innerHTML = "<a href='javascript:prePage();'>Pre</a>";}
function preText(){preSpan.innerHTML = "Pre";}

function nextLink(){nextSpan.innerHTML = "<a href='javascript:nextPage();'>Next</a>";}
function nextText(){nextSpan.innerHTML = "Next";}

function lastLink(){lastSpan.innerHTML = "<a href='javascript:lastPage();'>Last</a>";}
function lastText(){lastSpan.innerHTML = "Last";}
(function($){

    //插件
    $.extend($,{
        //命名空间
        sortTable:{
            sort:function(tableId,Idx){
                var table = document.getElementById(tableId);
                var tbody = table.tBodies[0];
                var tr = tbody.rows;

                var trValue = new Array();
                for (var i=0; i<tr.length; i++ ) {
                    trValue[i] = tr[i];  //将表格中各行的信息存储在新建的数组中
                }

                if (tbody.sortCol == Idx) {
                    trValue.reverse(); //如果该列已经进行排序过了,则直接对其反序排列
                } else {
                    //trValue.sort(compareTrs(Idx));  //进行排序
                    trValue.sort(function(tr1, tr2){
                        var value1 = tr1.cells[Idx].innerHTML;
                        var value2 = tr2.cells[Idx].innerHTML;
                        return value1.localeCompare(value2);
                    });
                }

                var fragment = document.createDocumentFragment();  //新建一个代码片段,用于保存排序后的结果
                for (var i=0; i<trValue.length; i++ ) {
                    fragment.appendChild(trValue[i]);
                }
                tbody.appendChild(fragment); //将排序的结果替换掉之前的值
                tbody.sortCol = Idx;
            }
        }
    });
})(jQuery);

到此,即可实现对页面表格内的数据进行分页、排序、搜索操作。

本文内所操作的数据是页面上写死的,也可以从后台取数据到页面拼接,下图可做参考:

整合后的代码有一个bug,如果模糊搜索的时候输入关键字为空,则回车查询出来的是把所有的内容显示出来,点了分页按钮后页面回复正常的分页显示。到此结束,多多指教^_^。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值