插件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>