(function($) {
$.fn.tablepager = function(options){
var defaults = {
table: null,
pager: null,
limit: 10,
displayingText: '%TOTAL_ROW%件中、%FIRST_ROW% - %LAST_ROW%を表示',
firstText: '最初',
lastText: '最後',
prevText: '前へ',
nextText: '次へ',
version: 0.1
};
defaults.table = this.selector;
options.pager = options.pager;
var config = $.extend({}, defaults, options);
moveTo(1);
if (this.tablesorter) {
this.trigger('update');
}
// TABLE TBODY内のTRの数を返します
function countRow() {
return $(config.table).find("tbody tr").size();
}
// 最大ページ数を返します
function countPage() {
return Math.ceil(countRow() / config.limit);
}
// nページへ移動します
function moveTo(n) {
n = n ? n : 1;
offset = config.limit * (n - 1);
maxrow = offset + config.limit - 1;
$.each($(config.table).find("tbody tr"), function(index){
if (index < offset || index > maxrow) {
$(this).css('display', 'none');
} else {
$(this).css('display', '');
}
});
pagenate(n);
}
// ページネーションを出力します
function pagenate(currentPage) {
$(config.pager).empty();
if (countRow() == 0) return false;
var firstRow = (currentPage - 1) * config.limit + 1;
var lastRow = firstRow - 1;
$.each($(config.table).find("tbody tr"), function(){
if($(this).css('display') != 'none') {
lastRow++;
}
});
var markup = config.displayingText.replace('%TOTAL_ROW%', countRow())
.replace('%FIRST_ROW%', firstRow)
.replace('%LAST_ROW%', lastRow);
for(var i=1; i <= countPage(); i++) {
if (currentPage != i) {
markup += '' + i + ' ';
} else {
markup += '' + i + ' ';
}
}
$(config.pager).append(markup);
$.each($(config.pager).find("a"), function(index){
if($(this).text().match(/^\d$/)) {
$(this).bind('click', function(){
moveTo($(this).text());
});
}
});
}
};
})(jQuery);
2013年6月27日木曜日
2013年6月14日金曜日
TABLEにページング機能を追加するjQUery tablePagerプラグイン
TABLEにページング機能を追加するjQUery tablePagerプラグインを作ってみました。
/** * jQuery tablePager plugin * TABLEタグ内のTBODY下にあるTRタグを指定された件数ごとにページングし、 * 指定されたセレクタにページネーションを出力するjQueryプラグインです。 * * 【html】 * <div id='pager'></div> * <table id='item_list'> * <thead>…</thead> * <tbody> * <tr> * <td>xxxxxxx</td> * * 【javascript】 * $('#item_list').tablePager(); * * 【option】 * appender : ページネーションを出力する要素のID * displayingText: (既定)%TOTAL_ROW%件中、%FIRST_ROW% - %LAST_ROW%を表示' * %で囲まれた部分が変数によって置換されます。 * firstText : (既定)最初→最初のページへのリンクに使用する文字列です。 * lastText : (既定)最後→最後のページへのリンクに使用する文字列です。 * prevText : (既定)前へ→前のページへのリンクに使用する文字列です。 * nextText : (既定)次へ→次のページへのリンクに使用する文字列です。 * */ (function($){ $.extend({ tablePager: new function() { // 設定情報 var config; // デフォルト値 var defaults = { limit: 10, page: 1, appender: 'pager', tableId: '', displayingText: '%TOTAL_ROW%件中、%FIRST_ROW% - %LAST_ROW%を表示', firstText: '最初', lastText: '最後', prevText: '前へ', nextText: '次へ', }; // 総レコード数を返す function getRecordCount() { return $(config.tableId).find("tbody tr").length; } // 1ページあたりの表示件数を返す function getLimit() { return config.limit; } // 最大ページ番号を返す function getMaxPages() { return Math.ceil(getRecordCount() / config.limit); } // 現在表示しているページを返す function getPage() { return config.page; } // 現在表示しているページの最初の行番号を返す function getFirstRow() { return config.limit * (config.page - 1) + 1; } // 現在表示しているページの最後の行番号を返す function getLastRow() { return getFirstRow() + $(config.tableId).find('tbody tr:visible').length - 1; } /** * public methods */ // id が appender のエレメントにページネーションを出力する $.fn.pagenate = function pagenate() { var prefix = '_pagenate'; $('#'+config.appender).html('') var link = config.displayingText.replace('%TOTAL_ROW%', getRecordCount()) .replace('%FIRST_ROW%', getFirstRow()) .replace('%LAST_ROW%', getLastRow()); if (config.page > 1) { link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(1)">' + config.firstText + '</a> '; link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + (config.page - 1) + ')">' + config.prevText + '</a> '; } for(var i=1; i<=getMaxPages(); i++) { id = prefix + i; if (i != config.page) { link += '<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + i + ')">' + i + '</a> '; } else { link += '<b>' + i + '</b> '; } } if (config.page < getMaxPages()) { link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + (config.page + 1) + ')">' + config.nextText + '</a> '; link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + getMaxPages() + ')">' + config.lastText + '</a> '; } $('#'+config.appender).append(link); } // nページへ移動する $.fn.page = function page(n) { config.page = n; var offset = config.limit * (config.page - 1); var nRow = 1; $.each($(config.tableId).find("tbody tr"), function(){ if (nRow > offset && nRow <= offset + config.limit) { $(this).show(); } else { $(this).hide(); } nRow++; }); // ページネーションを再描画 this.pagenate(); return false; } // コンストラクタ this.construct = function(options) { config = $.extend(defaults, options); config.tableId = this.selector; this.page(1); this.pagenate(); }; return this; } }); // extend plugin scope $.fn.extend({ tablePager: $.tablePager.construct }); })(jQuery);
2013年6月6日木曜日
CSS:長いURLなどをブロック要素内で強制的に折り返すには
CSS:長いURLなどをブロック要素内で強制的に折り返すには
word-wrap:break-word;
word-break:break-all;
word-break:break-all;
登録:
投稿 (Atom)