我正在使用DataTables。
我要做的是:通过使用其中一个列值,获取此值所在的页码。
我试过这个:jumpToData() 但这并没有成功。原因是
var pos = this.column(column, { order: 'current' }).data().indexOf(data);
jQuery.fn.dataTable.Api.register('page.jumpToData()'
中的返回值> = 0仅当我被放置在值为的页面上时。 例如,我想检测所需值的页面,但是我要停留在另一个页面上,所以为了检测第3页上的值,我需要转到这个页面然后我才能检测到它,这使得没有一点也不。
我需要做的是:通过停留在第一页上,使用其他页面中的值,检测这些页码,然后导航到它们:
$('#Grid_grid').DataTable().page(PageNumber).draw(false);
我该如何实现?
修改
有些想法(jumpToData()中的一些变化):
jQuery.fn.dataTable.Api.register('page.jumpToData()', function (data, column) {
for (var i = 0; i < this.page.info().pages; i++) {
var test = this.page(i).column(column, { order: 'current' }).data().indexOf(data);
if (test >= 0) {
this.page(i).draw(false);
return this;
}
}
return this;
});
(编辑2:想法没有得到回报,没有区别)
但现在我得到了第二个问题: 数据表的任何方法都不适用于.cshtml页面。 例如,我需要获得整体页数。我这样做:
$('#Grid_grid').DataTable().page.info().pages;
这让我回归0; 同时,将它放入控制台(Chrome F12)工作正常(返回5)。怎么回事?
编辑3: 想出了这个:
function LoadPage(value) {
var table = $('#Grid_grid').DataTable();
var pageNumber = table.search(value).page();
table.page(pageNumber).draw(false);
}
看起来很有前途但是我仍然无法验证它,因为在控制台中DataTable方法正在运行,但在.cshtml中没有。 (search()或page()不返回任何内容。)
编辑4:
将问题移至another question
答案 0 :(得分:1)
<强>原因强>
您的新API方法page.jumpToData()
会尝试查询所有网页数据,因为column()
API方法中的第二个参数selector-modifier
默认具有属性page: 'all'
。如上所述,它将始终保留在第一页。
<强>解强>
DataTables的创建者Allan Jardine发布了原始的page.jumpToData()
插件。它按预期工作,可以代替修改使用,以避免不必要的迭代。
$.fn.dataTable.Api.register('page.jumpToData()', function (data, column) {
var pos = this.column(column, {
order: 'current'
}).data().indexOf(data);
if (pos >= 0) {
var page = Math.floor(pos / this.page.info().length);
this.page(page).draw(false);
}
return this;
});
<强>样本强>
请参阅this jsFiddle以获取代码和演示。
备注强>
在上面的演示中,我添加了console.log("Number of pages", table.page.info().pages);
只是为了证明API方法有效。但是它们可能有效,因为我有HTML源数据。
如果您有Ajax源数据,则只需在加载数据时查询页数。使用initComplete
选项定义一个回调函数,当您的表完全初始化,加载和绘制数据时将调用该函数。