如何正确检测DataTable中的页面?

时间:2015-08-10 08:10:19

标签: javascript jquery datatables

我正在使用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

1 个答案:

答案 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选项定义一个回调函数,当您的表完全初始化,加载和绘制数据时将调用该函数。