コードで simplePagination を使用しようとしています。 (MVC4 C#を使用して開発しています)
この一連のコードがあるとしましょう
<table>
<thead>
<tr>
<td><input type="checkbox" name="select-all" id="select-all" /></td>
<td style="text-align: left">Name</td>
<td style="text-align: left">Created By</td>
<td style="text-align: left">Created Date</td>
</tr>
</thead>
<tbody>
<tr class="post">
<td><p><input Length="0" name="314" type="checkbox" value="true" /><input name="314" type="hidden" value="false" /></p></td>
<td>Window</td>
<td>John</td>
<td>01/01/2014 12:00:00 AM</td>
</tr>
<tr class="post">
<td><p><input Length="0" name="314" type="checkbox" value="true" /><input name="314" type="hidden" value="false" /></p></td>
<td>Door</td>
<td>Chris</td>
<td>01/01/2014 12:00:00 AM</td>
</tr>
<tr class="post">
<td><p><input Length="0" name="314" type="checkbox" value="true" /><input name="314" type="hidden" value="false" /></p></td>
<td>Floor</td>
<td>Michael</td>
<td>01/01/2014 12:00:00 AM</td>
</tr>
<tr class="post">
<td><p><input Length="0" name="314" type="checkbox" value="true" /><input name="314" type="hidden" value="false" /></p></td>
<td>Car</td>
<td>James</td>
<td>01/01/2014 12:00:00 AM</td>
</tr>
<tr class="post">
<td><p><input Length="0" name="314" type="checkbox" value="true" /><input name="314" type="hidden" value="false" /></p></td>
<td>Bike</td>
<td>Steven</td>
<td>01/01/2014 12:00:00 AM</td>
</tr>
</tbody>
</table>
*注意:上記のコードでは、クラス 'post'を各 'tr'(テーブル本体の行)に追加します。そして、これらの行はforループ(C#)によって動的に生成されます
そして、ドキュメントから simplePagination を使用したい場合、次のようにjqueryを宣言する必要があります。
$(function() {
$(selector).pagination({
items: 100,
itemsOnPage: 10,
cssStyle: 'light-theme'
});
});
実際、この simplePagination の使用方法(*呼び出し方法)はよくわかりません。ページネーションを扱うのは初めてです。
私はすでにこのコードをテーブルの後に配置しようとしました
<div class="pagination-page"></div>
そして、 '。pagination-page'でjquery呼び出しメソッド内の 'Selector'を変更しましたが、動作しませんでした。
$(function() {
$('.pagination-page').pagination({
items: 100,
itemsOnPage: 10,
cssStyle: 'light-theme'
});
});
*最初のページでのみ表示される手段
+--------------------------------------------------+
| [] | Name | CreatedBy | CreatedDate |
|--------------------------------------------------|
| [] | Window | John | 01/01/2014 12:00:00 AM |
| [] | Door | Chris | 01/01/2014 12:00:00 AM |
+--------------------------------------------------+
2ページ目に表示されます
+--------------------------------------------------+
| [] | Name | CreatedBy | CreatedDate |
|--------------------------------------------------|
| [] | Floor | Michael | 01/01/2014 12:00:00 AM |
| [] | Car | James | 01/01/2014 12:00:00 AM |
+--------------------------------------------------+
など。
*注意:このjqueryがアイテム数を検出し、ページ数を生成し、それに応じてそれらのアイテムを配置する方法がわかりません。
このプラグインについて注意すべきことの1つは、数人が混乱するかもしれないことですが、技術的にはページネーション自体を実装していないということです。ページナビゲーターを生成し、jQueryイベントを介して、独自のページネーション機能に単純に接続する手段を提供します。
質問に含まれている simplePagination リンクから必要な手順1(およびCSSスタイリングが必要な場合は2)を実行したと仮定すると、次のjQueryが必要な処理を実行します。
jQuery(function($) {
// Consider adding an ID to your table
// incase a second table ever enters the picture.
var items = $("table tbody tr");
var numItems = items.length;
var perPage = 2;
// Only show the first 2 (or first `per_page`) items initially.
items.slice(perPage).hide();
// Now setup the pagination using the `.pagination-page` div.
$(".pagination-page").pagination({
items: numItems,
itemsOnPage: perPage,
cssStyle: "light-theme",
// This is the actual page changing functionality.
onPageClick: function(pageNumber) {
// We need to show and hide `tr`s appropriately.
var showFrom = perPage * (pageNumber - 1);
var showTo = showFrom + perPage;
// We'll first hide everything...
items.hide()
// ... and then only show the appropriate rows.
.slice(showFrom, showTo).show();
}
});
// EDIT: Let's cover URL fragments (i.e. #page-3 in the URL).
// More thoroughly explained (including the regular expression) in:
// https://github.com/bilalakil/bin/tree/master/simplepagination/page-fragment/index.html
// We'll create a function to check the URL fragment
// and trigger a change of page accordingly.
function checkFragment() {
// If there's no hash, treat it like page 1.
var hash = window.location.hash || "#page-1";
// We'll use a regular expression to check the hash string.
hash = hash.match(/^#page-(\d+)$/);
if(hash) {
// The `selectPage` function is described in the documentation.
// We've captured the page number in a regex group: `(\d+)`.
$(".pagination-page").pagination("selectPage", parseInt(hash[1]));
}
};
// We'll call this function whenever back/forward is pressed...
$(window).bind("popstate", checkFragment);
// ... and we'll also call it when the page has loaded
// (which is right now).
checkFragment();
});
実行例 here と、simplePaginationに関するより徹底的なガイド here を見つけることができます。
EDIT:Mike O'Connorが必要性を強調したため、URLフラグメント(リロード時およびバック/フォワード時)を処理するコードのセクションを追加しました。 URLフラグメント処理の実際の例を見ることができます here 。
EDIT 2:後方/前方フラグメント更新(IE11 ...)のブラウザ間の互換性が必要な場合は、 履歴.js 上記のコードを実装する前のスクリプト。マイク・オコナーに感謝します:)
EDIT 3:コンテンツを動的に追加または削除する場合は、これらの変更を反映するようにページネーターを手動で更新する必要があります。私もそのための例を挙げました。 here で実行されていることがわかります。
わかりました。BilalAkilのjQuery(function($)をテストしました。これは私にとっては良いスタートでした。Bilalに感謝します。動作しますが、いくつか欠陥があります。1つは、 彼の最初のリンク ページ2をクリックすると、その番号がロケーションボックスに「 http://bilalakil.github.io/bin/simplepagination/#page-2 」---#page-2として表示されます。ただし、そのURL全体をコピーして別のタブまたはウィンドウのロケーションボックスに貼り付け、ページ2にリンクしている人をシミュレートすると、フラットになりません。ページ1に表示されるか、ページ2をクリックした後ボタンを押してページ2に移動すると、ページをリロードするだけでページ1に移動します。
私はコメントしたでしょうが、ここにいくつかのコードを残す必要があります。その特定の問題を修正した修正jQuery(function($)を次に示します。
var items = $("#content .page");
var numItems = items.length;
var hashPageNum = getPageNum(); //code for getPageNum() is below
items.hide().slice(hashPageNum-1, hashPageNum).show();
// now setup pagination
$("#pagination").pagination({
items: numItems,
itemsOnPage: 1,
cssStyle: "light-theme",
onPageClick: function(pageNumber) {
items.hide().slice(pageNumber-1, pageNumber).show();
}
});
$('#pagination').pagination('drawPage', hashPageNum);
ページ要素に使用しているセレクタースキームは次のとおりであると言って、これを前書きする必要がありました。
<div id="pagination"></div>
<table id="content"><tbody><tr class="page"><td>...
そして、ページごとに1つの<tr>を使用してperPage = 1を使用していますが、本質的な違いは次の行です。
items.hide().slice(hashPageNum-1, hashPageNum).show();
これは、#page-nが最後に機能しないリンクに関する問題の主な修正です。最後の行は、ページnが選択された状態でページネーションバーを設定するため、その目的にも必要です。
2番目の問題は、Bilalの裸のコードを使用した戻るボタンと進むボタンの完全な機能不全です。ページネーションバーを長いページの下部に配置すると、ブラウザの組み込みのページナビゲーションを使用したくなるでしょう。 EDIT:Bilalはこれらの問題を取り除くためにコードを更新しました。
そのため、ここにその目的に向けて本質的な詳細を持つ関数があります。上記のコードで呼び出されますが、他の1つの場所でも呼び出されます。
function getPageNum(){
var hashtag = parent.location.hash;
var hashPageNum = 1; //default
if (hashtag == '#page-1') {
hashPageNum=1;
} else if (hashtag == '#page-2'){
hashPageNum=2;
} else if (hashtag == '#page-3') {
hashPageNum=3;
} else if (hashtag == '') {
hashPageNum=1;
parent.location.hash = '#page-1';
};
return hashPageNum;
};
OK、私は洗練されていないことを理解しますが、本質的な詳細は、parent.location.hashがnullの場合、関数はnullではなく1ページ目で1を返すことです。
もう1つのステップがあります。それは、HTML5のことであるwindow.onpopstateを武器化することです(これがHTML5以外のブラウザで問題を引き起こさないことを願っています。詳しくご存じの場合はコメントしてください)。
window.onpopstate = function(e){
var pagenum = getPageNum();
$("#content .page").hide().slice(pagenum-1, pagenum).show();
$('#pagination').pagination('drawPage', pagenum);
};
そして、それで私は終わったように見えます。 #page-nのサフィックスを付けてURLをコピーし、別の場所で起動すると、機能します。進むボタンと戻るボタンが機能します。すぐ上のコードの「drawPage」ビットは、ページネーションバーの表示を調整するためのものであることに注意してください。
OK、これは2015年2月16日の編集です... IE11の問題の修正を表示するためにコメントで説明されています。上記のコードは編集しませんでした。おそらく、この方法で修正したいとは思わないからです。
最初に このgithubプロジェクト に移動し、ファイルに「t」と入力して(hah!)、history.min.jsをクリックしてから、Rawボタンをクリックし、ブラウザーでSaveAsを実行します。したがって、ポップアップ状態のイベント(およびその他のイベント)を発生させないブラウザー用に効果的に作成するJavaScriptライブラリーを使用します。
さて、上記のコードでwindow.onpopstate = function(e){}を削除しますが、そのコードブロックを保存し、jQuery(function($)の最後、$( '#pagination')。pagination( 'drawPage'、hashPageNum);、次のように:
$(window).on('popstate', function(e) {
var pagenum = getPageNum();
$("#content .page").hide().slice(pagenum-1, pagenum).show();
$('#pagination').pagination('drawPage', pagenum);
});
編集ページにページをリンクしているページにリンクを配置する場合、たとえば、ホームページのメニューにアンカーがあり、ページのページの一部に移動する場合があります---リンクにtarget = "_ blank"を入力し、hrefにwww.yourdomain.com/yourpaginatedpageを入力すると、すべて問題ありません。ページ分割されたページが新しいタブまたは新しいウィンドウとして開くので、ブラウザの戻る矢印を使用してホームページに戻ろうとしないため、問題ありません。
しかし... target = "_ blank"を省略し、同じウィンドウでページ分割されたページを開くと、戻るボタンが機能しないことがわかります。戻る矢印を押すと履歴が表示されます(実際にはtwo yourpaginatedpageのリストがあるため間違っています)が、矢印をクリックしても機能しません。
解決策は、単にwww.yourdomain.com/yourpaginatedpage#page-1をhrefとして#page-1で挿入することです。その後、戻る矢印が機能します。
最初に追加:
<script type="text/javascript" src="mio_path_js/jquery.js"></script>
<script type="text/javascript" src="mio_path_js/jquery.simplePagination.js"></script>
<link type="text/css" rel="stylesheet" href="mio_path_css/simplePagination.css"/>
その後、10個の要素に対してAjax関数を次のように呼び出します:
$(function() {
$(#id_paginator").pagination({
items: 100,
itemsOnPage: 10,
cssStyle: 'light-theme'
});
});
または、すべての要素をロードする場合:
$ .ajax({...... ...... success:function(response、status、xhr){jQuery(function($){var pageParts = $( "。paginate"); var numPages = countSelect ; var perPage = 10; pageParts.slice(perPage).hide();
$("#page-nav").pagination({
items: numPages,
itemsOnPage: perPage,
cssStyle: "light-theme",
currentPage: numeroSelezionato,
onPageClick: function(pageNum) {
$("#myModalWaiting").show();
var start = perPage * (pageNum - 1);
var end = start + perPage;
cambiaPagina(start,end,pageNum);
numeroSelezionato = pageNum;
}
});
});
}
)};
Htmlコードは次のとおりです。
<table>
<tr>
<th>
<td>
............
...............
.................
</td>
</th>
</tr></table>
<div id="id_paginator"></div>
他のJquery simplePaginationの例については、 here を参照してください。
または、より多くの要素をロードするには: https://lentux-informatica.com/paginazione-liste-con-jquery-parte-2-2-simplepagination-js/
次のコードは私のために働く:
function paginationTable() {
var items = $("table tbody tr");
var tablaeBody = $("table tbody");
var numItems = items.length;
var perPage = 20;
// Only show the first 20 (or first `per_page`) items initially.
tablaeBody.html(items.slice(0,20));
// Now setup the pagination using the `.pagination-page` div.
$(".pagination-page").pagination({
items: numItems,
itemsOnPage: perPage,
cssStyle: "light-theme",
// This is the actual page changing functionality.
onPageClick: function(pageNumber) {
// We need to show and hide `tr`s appropriately.
var showFrom = perPage * (pageNumber - 1);
var showTo = showFrom + perPage;
tablaeBody.html(items.slice(showFrom,showTo));
}
});
}
hTMLテーブルを準備した後にこの関数を呼び出します。
Bilal AkilのjQuery(function($))をテストしましたが、修正したいミスを1つ見つけました。このトピックに関与してくれたBilalに感謝します。
コメントを投稿したり、彼の投稿の編集を提案したりすることはできないため、回答をここに直接投稿します。詳細については、Bilal Akilの投稿をご覧ください。
ページネーションのセレクターは、ウェブサイトで試したときにコード内で間違っていました(実際には同じではありませんでした)。
// mind the slight change below, personal idea of best practices
jQuery(function($) {
// consider adding an id to your table,
// just incase a second table ever enters the picture..?
var items = $("table tbody tr");
var numItems = items.length;
var perPage = 2;
var pagination_placeholder_selector = ".pagination-page"; // put in a variable to ensure proper changes in the future
var myPageName = "#page-"; // a number will follow for each page
// only show the first 2 (or "first per_page") items initially
items.slice(perPage).hide();
// now setup your pagination
// you need that .pagination-page div before/after your table
$(pagination_placeholder_selector).pagination({
items: numItems,
itemsOnPage: perPage,
cssStyle: "light-theme",
hrefTextPrefix: myPageName,
onPageClick: function(pageNumber) { // this is where the magic happens
// someone changed page, lets hide/show trs appropriately
var showFrom = perPage * (pageNumber - 1);
var showTo = showFrom + perPage;
items.hide() // first hide everything, then show for the new page
.slice(showFrom, showTo).show();
}
});
// EDIT: extra stuff to cover url fragments (i.e. #page-3)
// https://github.com/bilalakil/bin/tree/master/simplepagination/page-fragment
// is more thoroughly commented (to explain the regular expression)
// we'll create a function to check the url fragment and change page
// we're storing this function in a variable so we can reuse it
var checkFragment = function() {
// if there's no hash, make sure we go to page 1
var hash = window.location.hash || (myPageName+"1");
// we'll use regex to check the hash string
var re = new RegExp("^"+myPageName+"(\\d+)$");
hash = hash.match(re);
if(hash)
// the selectPage function is described in the documentation
// we've captured the page number in a regex group: (\d+)
$(pagination_placeholder_selector).pagination("selectPage", parseInt(hash[1]));
};
// we'll call this function whenever the back/forward is pressed
$(window).bind("popstate", checkFragment);
// and we'll also call it to check right now!
checkFragment();
});
Bilal Akilの作業を関数に変換し、ajax呼び出しでデータを読み込んでいるときにajaxに呼び出しました。それは素晴らしい作品です。すべての参加者に感謝します。
function paginate() {
// consider adding an id to your table,
// just incase a second table ever enters the picture..?
var items = jQuery("#searched_prfiles .row .col-md-4");
var numItems = items.length;
var perPage = 2;
var pagination_placeholder_selector = "#pagination_links"; // put in a variable to ensure proper changes in the future
var myPageName = "#page-"; // a number will follow for each page
// only show the first 2 (or "first per_page") items initially
items.slice(perPage).hide();
// now setup your pagination
// you need that .pagination-page div before/after your table
jQuery(pagination_placeholder_selector).pagination({
items: numItems,
itemsOnPage: perPage,
cssStyle: "light-theme",
hrefTextPrefix: myPageName,
onPageClick: function(pageNumber) { // this is where the magic happens
// someone changed page, lets hide/show trs appropriately
var showFrom = perPage * (pageNumber - 1);
var showTo = showFrom + perPage;
items.hide() // first hide everything, then show for the new page
.slice(showFrom, showTo).show();
}
});
// EDIT: extra stuff to cover url fragments (i.e. #page-3)
// https://github.com/bilalakil/bin/tree/master/simplepagination/page-fragment
// is more thoroughly commented (to explain the regular expression)
// we'll create a function to check the url fragment and change page
// we're storing this function in a variable so we can reuse it
var checkFragment = function() {
// if there's no hash, make sure we go to page 1
var hash = window.location.hash || (myPageName+"1");
// we'll use regex to check the hash string
var re = new RegExp("^"+myPageName+"(\\d+)$");
hash = hash.match(re);
if(hash)
// the selectPage function is described in the documentation
// we've captured the page number in a regex group: (\d+)
jQuery(pagination_placeholder_selector).pagination("selectPage", parseInt(hash[1]));
};
// we'll call this function whenever the back/forward is pressed
jQuery(window).bind("popstate", checkFragment);
// and we'll also call it to check right now!
checkFragment();
}