基于jQuery轻量分页插件jquery.pages.js—alpha版

插件jquery.pages.js代码:

<script type="text/javascript">
	;(function($){
		var defaults = {
			itemPerPage:5,            //每页记录数
			theme:'default',          //主题样式
			id:'pages_plugin',        //添加的插件DOM的id名
		}
		//实时记录分页状态
		var status = {
			first:false,
			last:true,
			previous:false,
			next:true,
			current:1,
		};
		$.fn.pages = function(){
			var config = arguments[0] || {};
			if(!$.isPlainObject(config)) return;
			this.config = $.extend({},defaults,config);
			init_html.call(this);
			init_data.call(this);
			init_event.call(this);
		}
		
		//初始化html结构
		function init_html(){
			//判断选择器是否选中了table
			if(!($(this)[0].tagName.toLowerCase() === 'table')){
				return false;
			}
			//构造page html
			var page_html = '<tfoot id="'+this.config.id+'"><tr>\
            <th>\
              <div>\
               <div class="col-sm-6">\
                <div id="DataTables_Table_0_info" class="dataTables_info">\
                  <span id="start_contact_person"></span> to <span id="end_contact_person"></span> of <span id="total_contact_person"></span> \
                </div>\
               </div>\
               <div class="col col-sm-6">\
                <div id="DataTables_Table_0_paginate" class="dataTables_paginate">\
                 <a id="DataTables_Table_0_first" tabindex="0" class="first paginate_button paginate_button_disabled">首页</a><a id="DataTables_Table_0_previous" tabindex="0" \class="previous paginate_button paginate_button_disabled">上一页</a><span id="contact_person_page_span"></span><a id="DataTables_Table_0_next" tabindex="0" class="next paginate_button">下一页</a><a \id="DataTables_Table_0_last" tabindex="0" class="last paginate_button">末页</a>\
                </div>\
               </div>\
              </div>\
            </th>\
          </tr></tfoot>';
		  $(this).append(page_html);
		  //加载样式
		  var style='<link rel="stylesheet" type="text/css" href="'+this.config.theme+'.css" />'
		  $("head").append(style); 
		}
		
		//初始化数据
		var count,pages;
		function init_data(){
			//计算总记录条数
			count = $(this).find('tbody tr').length;
			//左下角show items
			$("#total_contact_person").html(count);
			//计算总页数
			pages = Math.ceil(count/this.config.itemPerPage);
			//构造分页按钮html
			var page_html = '';
			for(var i=1;i<=pages;i++){
				page_html += '<a class="paginate_button" tabindex="0">'+i+'</a>';
			}
			$("#contact_person_page_span").html(page_html);
			//初始化分页状态对象
			status.first = status.previous = false;
			if(pages>1){
				status.last = status.next = true;	
			} else {
				status.last = status.next = false;
			}
			status.current = 1;
			//根据分页状态对象初始化html
			setStatus.call(this,status);
		}
		
		//初始化事件绑定
		function init_event(){
		  var tableDom = this;
		  $("#"+this.config.id+" #DataTables_Table_0_first").on('click',function(){
			if(!$(this).hasClass('paginate_button_disabled')){
				status.current = 1;
				status.first = status.previous = false;
				if(pages>1){
					status.last = status.next = true;	
				} else {
					status.last = status.next = false;
				}
				//改变结构
				setStatus.call(tableDom,status);
			}
		  });
		  $("#"+this.config.id+" #DataTables_Table_0_last").on('click',function(){
			if(!$(this).hasClass('paginate_button_disabled')){
				status.current = pages;
				status.last = status.next = false;
				if(pages>1){
					status.first = status.previous = true;	
				} else {
					status.first = status.previous = false;
				}
				//改变结构
				setStatus.call(tableDom,status);
			}
		  });
		  $("#"+this.config.id+" #DataTables_Table_0_previous").on('click',function(){
			if(!$(this).hasClass('paginate_button_disabled')){
				if(status.current > 1){
					if(--status.current === 1){
						status.first = status.previous = false;	
					} else {
						status.first = status.previous = true;	
					}
					status.last = status.next = true;
					setStatus.call(tableDom,status);
				}
			}
		  });
		  $("#"+this.config.id+" #DataTables_Table_0_next").on('click',function(){
			if(!$(this).hasClass('paginate_button_disabled')){
				if(status.current < pages){
					if(++status.current === pages){
						status.last = status.next = false;	
					} else {
						status.last = status.next = true;	
					}
					status.first = status.previous = true;
					setStatus.call(tableDom,status);
				}
			}
		  });
		  $("#"+this.config.id+" #contact_person_page_span a").each(function(index, element) {
			$(element).on('click',function(){
				if(!$(element).hasClass('paginate_button_disabled')){	
				  status.current = index+1;
				  if(status.current === 1){
					  status.first = status.previous = false;
					  if(pages > 1){
						  status.last = status.next = true;
					  } else {
						  status.last = status.next = false;
					  }		
				  } else if(status.current === pages){
					  status.last = status.next = false;
					  if(pages > 1){
						  status.first = status.previous = true;
					  } else {
						  status.first = status.previous = false;
					  }
				  } else {
					  status.first = status.previous = status.last = status.next = true;
				  }
				  setStatus.call(tableDom,status);
				}
			});
		  });
		}
		
		function setStatus(status){
			//遍历状态对象
			for(i in status){
				if(i !== 'current'){
					if(status[i] === false){
						$("#"+this.config.id+" #DataTables_Table_0_"+i).addClass('paginate_button_disabled');
					} else {
						$("#"+this.config.id+" #DataTables_Table_0_"+i).removeClass('paginate_button_disabled');
					}
				} else {
					$("#"+this.config.id+" #contact_person_page_span a").each(function(index, element) {
						$(element).removeClass('paginate_active').addClass('paginate_button');
						if(index === (status.current-1)){
							$(element).removeClass('paginate_button').addClass('paginate_active');
						}
					});
				}
			}
			//左下角show items
			var start_contact_person = (status.current-1)*this.config.itemPerPage + 1;
			var end_contact_person = start_contact_person + this.config.itemPerPage - 1;
			end_contact_person = (end_contact_person < count) ? end_contact_person : count;
			$("#"+this.config.id+" #start_contact_person").html(start_contact_person);
			$("#"+this.config.id+" #end_contact_person").html(end_contact_person);
			//显示隐藏各tr来实现分页效果
			$(this).find("tbody tr").hide().slice(start_contact_person-1,end_contact_person).show();
		}
	})(jQuery);
</script>
插件默认样式代码:

#pages_plugin{
	font-family:"微软雅黑";
	font-size:13px;
}
#pages_plugin th{
	font-weight:400;
}
/*#pages_plugin .row:before{
	content:" ";
	display:table;
}
#pages_plugin .row:after{
	content:" ";
	display:table;
}
*:before{
	box-sizing:border-box;	
}*/
#pages_plugin .col-sm-6{
	float:left;
}
#pages_plugin .col-sm-6{
	width:50%;
}
#pages_plugin .dataTables_paginate{
	padding:15px;
	float:right;
}
#pages_plugin .dataTables_info{
	padding:15px;
}
#pages_plugin .dataTables_paginate a{
	color:#3A5A7A;
	text-decoration:none;
}
#pages_plugin .dataTables_paginate .paginate_button,.dataTables_paginate .paginate_active{
	-moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background: none repeat scroll 0 0 #FFFFFF;
    border-color: #DDDDDD;
    border-image: none;
    border-style: solid;
    border-width: 1px 0 1px 1px;
    cursor: pointer;
    outline: 0 none;
    padding: 6px 10px;
}

#pages_plugin .paginate_button.first{
	border-radius:3px 0px 0px 3px;
}
#pages_plugin .paginate_button.last{
	border-radius:0px 3px 3px 0px;
	border-right-width:1px;
}
#pages_plugin .dataTables_paginate .paginate_active{
	background-color:#F5F5F5;
}
#pages_plugin .dataTables_paginate .paginate_button_disabled{
	background-color: #FAFAFA;
    color: #CCCCCC;
}
插件使用方法:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="jquery.pages.js"></script>
<title>test pages</title>
</head>

<body>
    <table id="test" cellpadding="0" cellspacing="0" width="60%">
    	 <tr><td>1</td><td>1</td></tr>
        <tr><td>2</td><td>1</td></tr>
        <tr><td>2</td><td>1</td></tr>
        <tr><td>2</td><td>1</td></tr>
    </table>
</body>
<script type="text/javascript">
	$("#test").pages({
		itemPerPage:2,            	
	});
</script>
</html>

转载于:https://my.oschina.net/yongbaolinux/blog/167429

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值