javascript - 使用自定义函数对 DataTable 进行排序不起作用

标签 javascript jquery datatables datatables-1.10

我正在与 DataTables plug-in 合作在 JavaScript 中。

通常,如果我需要更新单元格值,我会使用 cell().data(set)方法后跟 .draw() .

但是,我不想使用这种方式,因为我的表包含大量 DOM 对象。因此,当我需要更新单元格时,我只需调用一些 jQuery,例如 $("#cell").attr("myattr", 50) ,然后我就设法永远不必使用draw()。这可以防止每次都重新构建对象,但不幸的是,这也意味着 DataTable 不知道这些更改(cell().data() 返回未更改的对象)。

当我希望对表格进行排序时,这是一个问题。实际上,排序是对数据表已知的数据、未改变的数据进行的。

所以我想我可以使用columns.render选项,实现这样的功能:

function(data, type, row, meta) {
    if (type === "sort") {
        return $("#cell").attr("myattr");
    }
    return data;
}

这不起作用,我认为这是因为 DataTable caches the data 。因此,由于我从不更新单元格数据,因此永远不需要更新缓存,并且使用此缓存完成排序,这与单元格 myattr 属性不对应。

我正在寻找一种解决方法,即使单元格值不是在内部更改而是从外部更改,也可以让我对数据表进行排序。

this JSFiddle ,单击“更改值”按钮并尝试对列进行排序,您可以看到值的排序不正确。

最佳答案

有几个解决方案:

SOLUTION #1

使用cell().invalidate()使缓存中的数据失效的API方法如下所示:

$('#example').DataTable().cell($("#a").closest('td')).invalidate('dom').draw(false);

演示

参见this jsFiddle用于代码和演示。

SOLUTION #2

您可以使用columns.orderDataType要指定自定义排序插件的名称,请参阅 Custom data source sorting 。这些插件可以访问实时 DOM 内容。 请注意,DataTables 中没有内置插件,必须单独添加它们。

您可以使用dom-text插件作为基础并编写自己的函数来访问数据进行排序。

演示

参见this jsFiddle用于代码和演示。

关于javascript - 使用自定义函数对 DataTable 进行排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747781/

相关文章:

javascript - HTML jQuery 选择选项值

javascript - 如何根据链接内容添加类?

javascript - 使用 jquery 数据表插件将选择菜单添加到多个表

django - 将 DataTables 插件与 Django 框架集成

javascript - jQuery 数据表未捕获类型错误 : Cannot read property 'length' of undefined

javascript - 访问 token 在时间 JavaScript 中过期

javascript - 使用 parse.com 的 Phonegap 推送通知

javascript - jquery 简单的自动完成 url 功能

javascript - 带有预览和删除,Jquery和Javascript的多图像上传

javascript - 如何防止项目在移动设备上被拖动