您的位置:首页 > Web前端 > JQuery

jquery.pagination.js源码分析,曾输入框跳转

2013-07-18 00:00 267 查看
/**

* This jQuery plugin displays pagination links inside the selected elements.

*

*
@author Gabriel Birke (birke *at* d-scribe *dot* de)

*
@version 1.2

* @param {int} maxentries Number of entries to paginate

* @param {Object} opts Several options (see README for documentation)

*
@return {Object} jQuery Object

*/

jQuery.fn.pagination = function(maxentries, opts){

opts = jQuery.extend({

items_per_page:10,

num_display_entries:10,

current_page:0,

num_edge_entries:0,

link_to:"#",

prev_text:"Prev",

next_text:"Next",

ellipse_text:"...",

prev_show_always:true,

next_show_always:true,

callback:function(){return false;}

},opts||{});

return this.each(function() {

/**

* Calculate the maximum number of pages

*/

function numPages() {

return Math.ceil(maxentries/opts.items_per_page);

}

/**

* Calculate start and end point of pagination links depending on

* current_page and num_display_entries.

*
@return {Array}

*/

function getInterval() {

var ne_half = Math.ceil(opts.num_display_entries/2);

var np = numPages();

var upper_limit = np-opts.num_display_entries;

var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;

var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);

return [start,end];

}

/**

* This is the event handling function for the pagination links.

* @param {int} page_id The new page number

*/

function pageSelected(page_id, evt){

current_page = page_id;

drawLinks();

var continuePropagation = opts.callback(page_id, panel);

if (!continuePropagation) {

if (evt.stopPropagation) {

evt.stopPropagation();

}

else {

evt.cancelBubble = true;

}

}

return continuePropagation;

}

/**

* This function inserts the pagination links into the container element

*/

function drawLinks() {

panel.empty();

var interval = getInterval();

var np = numPages();

// This helper function returns a handler function that calls pageSelected with the right page_id

var getClickHandler = function(page_id) {

return function(evt){ return pageSelected(page_id,evt); }

}

// Helper function for generating a single link (or a span tag if it's the current page)

var appendItem = function(page_id, appendopts){

page_id = page_id<0?0:(page_id<np?page_id:np-1); // Normalize page id to sane value

appendopts = jQuery.extend({text:page_id+1, classes:""}, appendopts||{});

if(page_id == current_page){

/**Add by Bili - start**/

if ((appendopts.text)=='上一页' || (appendopts.text)=='下一页') {

var lnk = jQuery("<span class=''>"+(appendopts.text)+"</span>");

} else {

var lnk = jQuery("<span class='current'>"+(appendopts.text)+"</span>");

}

/**Add by Bili - end**/

/**Remove by Bili - start**/

//var lnk = jQuery("<span class='current'>"+(appendopts.text)+"</span>");

/**Remove by Bili - start**/

}

else

{

var lnk = jQuery("<a>"+(appendopts.text)+"</a>")

.bind("click", getClickHandler(page_id))

.attr('href', opts.link_to.replace(/__id__/,page_id));

}

if(appendopts.classes){lnk.addClass(appendopts.classes);}

panel.append(lnk);

}

// Generate "Previous"-Link

if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){

appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});

}

// Generate starting points

if (interval[0] > 0 && opts.num_edge_entries > 0)

{

var end = Math.min(opts.num_edge_entries, interval[0]);

for(var i=0; i<end; i++) {

appendItem(i);

}

if(opts.num_edge_entries < interval[0] && opts.ellipse_text)

{

jQuery("<span>"+opts.ellipse_text+"</span>").appendTo(panel);

}

}

// Generate interval links

for(var i=interval[0]; i<interval[1]; i++) {

appendItem(i);

}

// Generate ending points

if (interval[1] < np && opts.num_edge_entries > 0)

{

if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)

{

jQuery("<span>"+opts.ellipse_text+"</span>").appendTo(panel);

}

var begin = Math.max(np-opts.num_edge_entries, interval[1]);

for(var i=begin; i<np; i++) {

appendItem(i);

}

}

// Generate "Next"-Link

if(opts.next_text && (current_page < np-1 || opts.next_show_always)){

appendItem(current_page+1,{text:opts.next_text, classes:"next"});

}

//新增输入跳转
if(numPages()>1){

jQuery("跳到第<input type='text' size='3' id='checkPageNum' value='"+(current_page+1)+"'>").appendTo(panel);

var btn = jQuery("<a href='#'>确定</a>")

.bind("click", function(evt){

var page=$("#checkPageNum").val();

if(!page){

alert("请输入页码!");

return false;

}

if(isNaN(page)){

alert("请输入正确页码!");

$("#checkPageNum").val("");

return false;

}

var p=parseInt(page)-1;

if(p<0){p=0}

if(p>numPages()-1){p=numPages()-1;}

$(this).attr('href', opts.link_to.replace(/__id__/,p));

return pageSelected(p,evt);

});

panel.append(btn);

}

}

// Extract current_page from options

var current_page = opts.current_page;

// Create a sane value for maxentries and items_per_page

maxentries = (!maxentries || maxentries < 0)?1:maxentries;

opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page;

// Store DOM element for easy access from all inner functions

var panel = jQuery(this);

// Attach control functions to the DOM element

this.selectPage = function(page_id){ pageSelected(page_id);}

this.prevPage = function(){

if (current_page > 0) {

pageSelected(current_page - 1);

return true;

}

else {

return false;

}

}

this.nextPage = function(){

if(current_page < numPages()-1) {

pageSelected(current_page+1);

return true;

}

else {

return false;

}

}

// When all initialisation is done, draw the links

drawLinks();

// call callback function

opts.callback(current_page, this);

});

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息