为多个元素分页?
问题描述:
让我们说我有一个这样的表:为多个<tbody>元素分页?
<table>
<thead>
<tr><th>Customer</th><th>Order</th><th>Month</th></tr>
</thead>
<tbody>
<tr><td>Customer 1</td><td>#1</td><td>January</td></tr>
<tr><td>Customer 1</td><td>#2</td><td>April</td></tr>
<tr><td>Customer 1</td><td>#3</td><td>March</td></tr>
</tbody>
<tbody>
<tr><td>Customer 2</td><td>#1</td><td>January</td></tr>
<tr><td>Customer 2</td><td>#2</td><td>April</td></tr>
<tr><td>Customer 2</td><td>#3</td><td>March</td></tr>
</tbody>
<tbody>
<tr><td>Customer 3</td><td>#1</td><td>January</td></tr>
<tr><td>Customer 3</td><td>#2</td><td>April</td></tr>
<tr><td>Customer 3</td><td>#3</td><td>March</td></tr>
</tbody>
....
.... 1000s of records like this
</table>
有没有一种方法可以让我PAGINATE基于tbody
元素?例如,我想显示第1页上的前50条记录等等。有没有这样做的jQuery插件,或者我应该写我自己的?有什么建议么?
答
传说,
jQuery Pagination Plugin - - 尼斯找到。
这里有一种方法可以使用这个插件来更加接近你最初的要求。
$(document).ready(function() {
var $tbodies = $("#myTable tbody");
// Create pagination element with options from form
var paginationOpts = {
callback: pageselectCallback,
items_per_page: 5,
num_display_entries: 10,
num_edge_entries: 2,
prev_text: "Prev",
next_text: "Next"
};
function pageselectCallback(page_index, jq) {
//calculate limits of the page in terms of tbody indices
var limits = {
start: page_index * paginationOpts.items_per_page,
end: (page_index + 1) * paginationOpts.items_per_page
};
$tbodies.filter(":visible").hide();
$tbodies.slice(limits.start, limits.end).show();
// Prevent click eventpropagation
return false;
}
$("#Pagination").pagination($tbodies.length, paginationOpts);
});
我不是说这样比较好。对于1000多个tbody,HTML可能非常庞大,页面转换可能非常缓慢,但如果您尚未修改数据的传输方式,这种方法可以为您节省开发时间。
将来可能对某人有用。
+0
+1谢谢你的时间。出于某种原因,我无法访问链接?另外,在我的方法中,我不是一次构建整个HTML,而是取决于正在查看的页面视图。另外,我同意你的评论。其缺乏远见 - 我应该在服务器端实施分页。经验教训:) –
Legend
2013-03-05 00:02:35
+0
图例是,您的页面将通过以JavaScript形式提供的数据而不是完全形成的HTML来缩小。 FWIW,我纠正了小提琴的链接。 –
2013-03-05 00:17:14
答
+0
谢谢。我唯一担心的是,这些似乎对于常规表格(一个带有多个“tr”标签的'tbody'标签)来说是非常有用的。然而,在我的使用案例中,我有一个自定义布局,而且我不了解如何针对我的使用情况调整这些插件。你有什么建议吗? –
Legend
2013-03-04 20:10:24
+0
本页似乎回答您的问题:[http://datatables.net/release-datatables/examples/advanced_init/row_grouping.html](http://datatables.net/release-datatables/examples/advanced_init/row_grouping.html )。您可以重写fnDrawCallback来为每个组创建一个新的tbody标记。 –
Jako
2013-03-04 20:28:46
答
我得到这个通过轻量工作插件叫做jQuery Pagination Plugin。
这里是一个demo如果任何人有兴趣。
HTML:
<div id="Pagination" class="pagination"></div>
<br style="clear:both" />
<table id="Searchresult"></table>
JS:
var members = [
// Any data array
];
var n = "";
function pageselectCallback(page_index, jq) {
// Get number of elements per pagionation page from form
var items_per_page = 5;
var max_elem = Math.min((page_index + 1) * items_per_page, members.length);
var newcontent = '';
// Iterate through a selection of the content and build an HTML string
newcontent = "<table>";
for (var i = page_index * items_per_page; i < max_elem; i++) {
newcontent += '<tbody><tr><td>' + members[i][0] + '</td></tr>';
newcontent += '<tr><td class="state">' + members[i][2] + '</td>';
newcontent += '<td class="party">' + members[i][3] + '</td></tr></tbody>';
}
newcontent += "</table>";
// Replace old content with new content
$('#Searchresult').html(newcontent);
// Prevent click eventpropagation
return false;
}
$(document).ready(function() {
// Create pagination element with options from form
var opt = {
callback: pageselectCallback
};
opt.items_per_page = 5;
opt.num_display_entries = 10;
opt.num_edge_entries = 2;
opt.prev_text = "Prev";
opt.next_text = "Next";
$("#Pagination").pagination(members.length, opt);
});
让我们说我有一个这样的表:为多个<tbody>元素分页?
<table>
<thead>
<tr><th>Customer</th><th>Order</th><th>Month</th></tr>
</thead>
<tbody>
<tr><td>Customer 1</td><td>#1</td><td>January</td></tr>
<tr><td>Customer 1</td><td>#2</td><td>April</td></tr>
<tr><td>Customer 1</td><td>#3</td><td>March</td></tr>
</tbody>
<tbody>
<tr><td>Customer 2</td><td>#1</td><td>January</td></tr>
<tr><td>Customer 2</td><td>#2</td><td>April</td></tr>
<tr><td>Customer 2</td><td>#3</td><td>March</td></tr>
</tbody>
<tbody>
<tr><td>Customer 3</td><td>#1</td><td>January</td></tr>
<tr><td>Customer 3</td><td>#2</td><td>April</td></tr>
<tr><td>Customer 3</td><td>#3</td><td>March</td></tr>
</tbody>
....
.... 1000s of records like this
</table>
有没有一种方法可以让我PAGINATE基于tbody
元素?例如,我想显示第1页上的前50条记录等等。有没有这样做的jQuery插件,或者我应该写我自己的?有什么建议么?
传说,
jQuery Pagination Plugin - - 尼斯找到。
这里有一种方法可以使用这个插件来更加接近你最初的要求。
$(document).ready(function() {
var $tbodies = $("#myTable tbody");
// Create pagination element with options from form
var paginationOpts = {
callback: pageselectCallback,
items_per_page: 5,
num_display_entries: 10,
num_edge_entries: 2,
prev_text: "Prev",
next_text: "Next"
};
function pageselectCallback(page_index, jq) {
//calculate limits of the page in terms of tbody indices
var limits = {
start: page_index * paginationOpts.items_per_page,
end: (page_index + 1) * paginationOpts.items_per_page
};
$tbodies.filter(":visible").hide();
$tbodies.slice(limits.start, limits.end).show();
// Prevent click eventpropagation
return false;
}
$("#Pagination").pagination($tbodies.length, paginationOpts);
});
我不是说这样比较好。对于1000多个tbody,HTML可能非常庞大,页面转换可能非常缓慢,但如果您尚未修改数据的传输方式,这种方法可以为您节省开发时间。
将来可能对某人有用。
+1谢谢你的时间。出于某种原因,我无法访问链接?另外,在我的方法中,我不是一次构建整个HTML,而是取决于正在查看的页面视图。另外,我同意你的评论。其缺乏远见 - 我应该在服务器端实施分页。经验教训:) – Legend 2013-03-05 00:02:35
图例是,您的页面将通过以JavaScript形式提供的数据而不是完全形成的HTML来缩小。 FWIW,我纠正了小提琴的链接。 – 2013-03-05 00:17:14
谢谢。我唯一担心的是,这些似乎对于常规表格(一个带有多个“tr”标签的'tbody'标签)来说是非常有用的。然而,在我的使用案例中,我有一个自定义布局,而且我不了解如何针对我的使用情况调整这些插件。你有什么建议吗? – Legend 2013-03-04 20:10:24
本页似乎回答您的问题:[http://datatables.net/release-datatables/examples/advanced_init/row_grouping.html](http://datatables.net/release-datatables/examples/advanced_init/row_grouping.html )。您可以重写fnDrawCallback来为每个组创建一个新的tbody标记。 – Jako 2013-03-04 20:28:46
我得到这个通过轻量工作插件叫做jQuery Pagination Plugin。
这里是一个demo如果任何人有兴趣。
HTML:
<div id="Pagination" class="pagination"></div>
<br style="clear:both" />
<table id="Searchresult"></table>
JS:
var members = [
// Any data array
];
var n = "";
function pageselectCallback(page_index, jq) {
// Get number of elements per pagionation page from form
var items_per_page = 5;
var max_elem = Math.min((page_index + 1) * items_per_page, members.length);
var newcontent = '';
// Iterate through a selection of the content and build an HTML string
newcontent = "<table>";
for (var i = page_index * items_per_page; i < max_elem; i++) {
newcontent += '<tbody><tr><td>' + members[i][0] + '</td></tr>';
newcontent += '<tr><td class="state">' + members[i][2] + '</td>';
newcontent += '<td class="party">' + members[i][3] + '</td></tr></tbody>';
}
newcontent += "</table>";
// Replace old content with new content
$('#Searchresult').html(newcontent);
// Prevent click eventpropagation
return false;
}
$(document).ready(function() {
// Create pagination element with options from form
var opt = {
callback: pageselectCallback
};
opt.items_per_page = 5;
opt.num_display_entries = 10;
opt.num_edge_entries = 2;
opt.prev_text = "Prev";
opt.next_text = "Next";
$("#Pagination").pagination(members.length, opt);
});
使用JavaScript与1000个元素在页面上处理是_overkill_,为什么不能在服务器端做这个? – undefined 2013-03-04 19:49:49
我不知道该结构的具体分页标签。亲自编写它不应该太难。数学很容易,jQuery使选择/显示/隐藏琐碎。约3小时的工作经过充分测试。 – 2013-03-04 19:51:05
http://datatables.net有分页选项。 – Blazemonger 2013-03-04 19:52:16