zoukankan      html  css  js  c++  java
  • jQuery DataTables插件分页允许输入页码跳转

    http://blog.csdn.net/alanzyy/article/details/53896230

    // START 2016-12-27添加,用于输入分页页码  
    $(".gotoPage").remove();  
    var pageHtml = "<span class='gotoPage' style='margin-left: 10px;'>" +  
            "<span>到第</span>" +  
            "<input type='text' style=' 40px; padding-left: 2px; padding-right: 2px; text-align: center;' class='integer' id='textGotoPage' data-prev='"+(page+1)+"' value='"+(page+1)+"'>" +  
            "<span>页</span>" +  
            "<a class='paginate_button' style=' 40px; border-right: 1px solid #e4e4e4;' id='btnGotoPage'>确认</a>" +  
            "</span>";  
    $(pageHtml).appendTo(container);  
      
    // 对页码输入进行限制,只能输入数字  
    var sfn = function() {  
        var value = $(this).val();  
        if (value == '') {  
            $(this).data("prev", $(this).val());  
            return;  
        }  
      
        var max = $(this).attr("maxlength");  
        if (value.length > max)  
            $(this).val(value.slice(0, max));  
      
        var regex = /^d+$/;  
        if (!regex.test(value)) {  
            $(this).val($(this).data("prev"));  
        }  
      
        $(this).data("prev", $(this).val());  
    };  
      
    var testinput = document.createElement('input');       
    if('oninput' in testinput){   
        document.getElementById("textGotoPage").addEventListener("input", sfn, false);   
    } else {  
        $("#textGotoPage").onpropertychange = sfn;   
    }  
      
    // 为确认按钮添加点击事件,执行分页跳转  
    $("#btnGotoPage").click(function(){  
        var textGotoPage = $("#textGotoPage").val();  
        if (textGotoPage == null || textGotoPage === '' || textGotoPage.match(/[^0-9]/)) {  
            // 没有输入或者输入了非数字,清除非数字  
            $("#textGotoPage").val(textGotoPage.replace(/[^d]/g, ''));  
            return;  
        }  
      
        if(parseInt(textGotoPage) > 0){  
            var oSettings = settings;  
      
            var iNewStart = oSettings._iDisplayLength * (textGotoPage - 1);  
            if (iNewStart < 0) {  
                iNewStart = 0;  
            }  
            if (iNewStart >= oSettings.fnRecordsDisplay()) {  
                iNewStart = (Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength) - 1) * oSettings._iDisplayLength;  
            }  
      
            oSettings._iDisplayStart = iNewStart;  
            _fnDraw(oSettings);  
        }  
    });  
    // END

    个人实践

     
    /* Bootstrap style pagination control */
    $.extend( $.fn.dataTableExt.oPagination, {
        "bootstrap": {
            "fnInit": function( oSettings, nPaging, fnDraw ) {
                var oLang = oSettings.oLanguage.oPaginate;
                var fnClickHandler = function ( e ) {
                    e.preventDefault();
                    if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
                        fnDraw( oSettings );
                    }
                };
                $(nPaging).append(
                    '<ul class="pagination">'+
                        '<li class="first disabled"><a href="#">'+oLang.sFirst+'</a></li>'+//此处添加
                        '<li class="prev disabled"><a href="#">'+oLang.sPrevious+'</a></li>'+
                        '<li class="next disabled"><a href="#">'+oLang.sNext+'</a></li>'+
                        '<li class="last disabled"><a href="#">'+oLang.sLast+'</a></li>'+//此处添加
                    '</ul>'
                );
                var els = $('a', nPaging);
                $(els[0]).bind( 'click.DT', { action: "first" }, fnClickHandler );//此处添加
                $(els[1]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
                $(els[2]).bind( 'click.DT', { action: "next" }, fnClickHandler );
                $(els[3]).bind( 'click.DT', { action: "last" }, fnClickHandler );//此处添加
    
                $(nPaging).find("ul").append(
                    "<li class='gotoPage' style='padding-left: 10px;'>" +
                    "<label>到第</label>" +
                    "<input type='text' class='integer' id='textGotoPage' data-prev='' value=''>" +
                    "<label>页</label>" +
                    "<a class='paginate_button' id='btnGotoPage'>确认</a>" +
                    "</li>"
                );
                // 对页码输入进行限制,只能输入数字
                var sfn = function() {
                    var value = $(this).val();
                    if (value == '') {
                        $(this).data("prev", $(this).val());
                        return;
                    }
    
                    var max = $(this).attr("maxlength");
                    if (value.length > max)
                        $(this).val(value.slice(0, max));
    
                    var regex = /^d+$/;
                    if (!regex.test(value)) {
                        $(this).val($(this).data("prev"));
                    }
    
                    var oPaging = oSettings.oInstance.fnPagingInfo();
                    if(value>oPaging.iTotalPages){
                        $(this).val($(this).data("prev"));
                    }
    
                    $(this).data("prev", $(this).val());
                };
    
                var testinput = document.createElement('input');
                if('oninput' in testinput){
                    $('#textGotoPage', nPaging).on("input", sfn);
                    //document.getElementById("textGotoPage").addEventListener("input", sfn, false);
                } else {
                    $("#textGotoPage").onpropertychange = sfn;
                }
    
                // 为确认按钮添加点击事件,执行分页跳转
                $("#btnGotoPage", nPaging).on('click', function(){
                    var textGotoPage = $("#textGotoPage").val();
                    if (textGotoPage == null || textGotoPage === '' || textGotoPage.match(/[^0-9]/)) {
                        // 没有输入或者输入了非数字,清除非数字
                        $("#textGotoPage").val(textGotoPage.replace(/[^d]/g, ''));
                        return;
                    }
    
                    if(parseInt(textGotoPage) > 0){
                        //var oSettings = settings;
    
                        var iNewStart = oSettings._iDisplayLength * (textGotoPage - 1);
                        if (iNewStart < 0) {
                            iNewStart = 0;
                        }
                        if (iNewStart >= oSettings.fnRecordsDisplay()) {
                            iNewStart = (Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength) - 1) * oSettings._iDisplayLength;
                        }
    
                        oSettings._iDisplayStart = iNewStart;
                        fnDraw(oSettings);
                    }
                });
            },
     
            "fnUpdate": function ( oSettings, fnDraw ) {
                var iListLength = 5;
                var oPaging = oSettings.oInstance.fnPagingInfo();
                var an = oSettings.aanFeatures.p;
                var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
     
                if ( oPaging.iTotalPages < iListLength) {
                    iStart = 1;
                    iEnd = oPaging.iTotalPages;
                }
                else if ( oPaging.iPage <= iHalf ) {
                    iStart = 1;
                    iEnd = iListLength;
                } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
                    iStart = oPaging.iTotalPages - iListLength + 1;
                    iEnd = oPaging.iTotalPages;
                } else {
                    iStart = oPaging.iPage - iHalf + 1;
                    iEnd = iStart + iListLength - 1;
                }
                //重新赋值跳转的页码
                if(parseInt($('#textGotoPage').val())>iEnd){
                    $('#textGotoPage').val(iEnd);
                    $('#textGotoPage').data("prev", iEnd);
                }
     
                for ( i=0, ien=an.length ; i<ien ; i++ ) {
                    // Remove the middle elements
                    $('li:gt(1)', an[i]).filter(':lt(-2)').remove();//此处修改 $('li:gt(0)', an[i]).filter(':not(:last)').remove();
     
                    // Add the new list items and their event handlers
                    for ( j=iStart ; j<=iEnd ; j++ ) {
                        sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
                        $('<li '+sClass+'><a href="#">'+j+'</a></li>')
                            .insertBefore( $('li:eq(-2)', an[i])[0] )//此处修改 .insertBefore( $('li:last', an[i])[0] )
                            .bind('click', function (e) {
                                e.preventDefault();
                                oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
                                fnDraw( oSettings );
                            } );
                    }
     
                    // Add / remove disabled classes from the static elements
                    if ( oPaging.iPage === 0 ) {
                        $('li:lt(2)', an[i]).addClass('disabled'); //此处修改 $('li:first', an[i]).addClass('disabled');
                    } else {
                        $('li:lt(2)', an[i]).removeClass('disabled'); //此处修改$('li:first', an[i]).removeClass('disabled');
                    }
     
                    if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
                        $('li:gt(-3)', an[i]).addClass('disabled'); //此处修改$('li:last', an[i]).addClass('disabled');
                    } else {
                        $('li:gt(-3)', an[i]).removeClass('disabled'); //此处修改$('li:last', an[i]).removeClass('disabled');
                    }
                }
            }
        }
    } );
  • 相关阅读:
    API
    Object constructor
    function()
    For语句的衍生对象
    编程语言发展史
    将Paul替换成Ringo
    Document.write和 getElementById(ID)
    姓名,电话号码,邮箱的正则检测
    JavaScript-BOM与DOM
    管理心得
  • 原文地址:https://www.cnblogs.com/jcz1206/p/6543060.html
Copyright © 2011-2022 走看看