使用自定义函数对 DataTable 进行排序不起作用
Sorting a DataTable using custom function does not work
我在 JavaScript 与 DataTables plug-in 一起工作。
通常,如果我需要更新单元格值,我会使用 cell().data(set)
method followed by .draw()
.
但是,我不想使用这种方式,因为我的 table 包含很重的 DOM 对象。因此,当我需要更新一个单元格时,我只调用一些 jQuery,例如 $("#cell").attr("myattr", 50)
,然后我设法永远不必使用 draw()
。这样可以防止每次都重建对象,但不幸的是,这也意味着 DataTable 不知道这些更改(cell().data()
returns 未更改的对象)。
当我想要对 table 进行排序时,这是一个问题。实际上,排序是对数据table已知的数据进行的,数据没有变化。
所以我想我可以使用 columns.render
选项,实现这样的功能:
function(data, type, row, meta) {
if (type === "sort") {
return $("#cell").attr("myattr");
}
return data;
}
这不起作用,我认为这是因为 DataTable caches the data。因此,由于我从不更新单元格数据,所以缓存永远不需要更新,并且使用此缓存完成排序,这与单元格 myattr
属性不对应。
我正在寻找一种解决方法,它可以让我对 DataTable 进行排序,即使单元格值不是在内部更改而是从外部更改。
尝试 this JSFiddle,单击 "CHANGE VALUES" 按钮并尝试对列进行排序,您可以看到值的排序不正确。
有几个解决方案:
SOLUTION #1
使用cell().invalidate()
API方法使缓存中的数据失效如下图:
$('#example').DataTable().cell($("#a").closest('td')).invalidate('dom').draw(false);
演示版
有关代码和演示,请参阅 this jsFiddle。
SOLUTION #2
您可以使用 columns.orderDataType
to specify name of custom ordering plug-in, see Custom data source sorting。这些插件可以访问实时 DOM 内容。
请注意,DataTables 中没有内置插件,它们必须单独添加。
可以使用dom-text
插件为基础,自己编写函数访问数据进行排序
演示版
有关代码和演示,请参阅 this jsFiddle。
我在 JavaScript 与 DataTables plug-in 一起工作。
通常,如果我需要更新单元格值,我会使用 cell().data(set)
method followed by .draw()
.
但是,我不想使用这种方式,因为我的 table 包含很重的 DOM 对象。因此,当我需要更新一个单元格时,我只调用一些 jQuery,例如 $("#cell").attr("myattr", 50)
,然后我设法永远不必使用 draw()
。这样可以防止每次都重建对象,但不幸的是,这也意味着 DataTable 不知道这些更改(cell().data()
returns 未更改的对象)。
当我想要对 table 进行排序时,这是一个问题。实际上,排序是对数据table已知的数据进行的,数据没有变化。
所以我想我可以使用 columns.render
选项,实现这样的功能:
function(data, type, row, meta) {
if (type === "sort") {
return $("#cell").attr("myattr");
}
return data;
}
这不起作用,我认为这是因为 DataTable caches the data。因此,由于我从不更新单元格数据,所以缓存永远不需要更新,并且使用此缓存完成排序,这与单元格 myattr
属性不对应。
我正在寻找一种解决方法,它可以让我对 DataTable 进行排序,即使单元格值不是在内部更改而是从外部更改。
尝试 this JSFiddle,单击 "CHANGE VALUES" 按钮并尝试对列进行排序,您可以看到值的排序不正确。
有几个解决方案:
SOLUTION #1
使用cell().invalidate()
API方法使缓存中的数据失效如下图:
$('#example').DataTable().cell($("#a").closest('td')).invalidate('dom').draw(false);
演示版
有关代码和演示,请参阅 this jsFiddle。
SOLUTION #2
您可以使用 columns.orderDataType
to specify name of custom ordering plug-in, see Custom data source sorting。这些插件可以访问实时 DOM 内容。
请注意,DataTables 中没有内置插件,它们必须单独添加。
可以使用dom-text
插件为基础,自己编写函数访问数据进行排序
演示版
有关代码和演示,请参阅 this jsFiddle。