Javascript JQuery Datatables在列中对select进行排序
我使用的是DataTables 1.10.12和JQuery 1.12.3 我对包含下拉列表的列排序有问题 我正在使用多重选择过滤器 一切正常,问题是它无法对包含select(that has selected=“selected”选项)的列进行排序,可能是因为我不知道如何填充multi_select中选项标记的值 那么,我如何在td内部(可能是使用regex)进行搜索,找到那些选定的选项呢?解决方案 您可以使用在选项中使用基于零的索引以特定列为目标,并在搜索(Javascript JQuery Datatables在列中对select进行排序,javascript,jquery,sorting,datatables,Javascript,Jquery,Sorting,Datatables,我使用的是DataTables 1.10.12和JQuery 1.12.3 我对包含下拉列表的列排序有问题 我正在使用多重选择过滤器 一切正常,问题是它无法对包含select(that has selected=“selected”选项)的列进行排序,可能是因为我不知道如何填充multi_select中选项标记的值 那么,我如何在td内部(可能是使用regex)进行搜索,找到那些选定的选项呢?解决方案 您可以使用在选项中使用基于零的索引以特定列为目标,并在搜索(type=='filter')或排
type=='filter'
)或排序(type=='order'
)期间返回所选值
var table=$('#示例').DataTable({
columnDefs:[
{
目标:[0,1,2,3],
呈现:函数(数据、类型、完整、元){
如果(类型=='filter'| |类型=='sort'){
var api=new$.fn.dataTable.api(meta.settings);
var td=api.cell({row:meta.row,column:meta.col}).node();
数据=$('select,input',td).val();
}
返回数据;
}
}
],
//…跳过。。。
});
上面的代码使用选项
元素的值来确定排序/搜索的值。然而,在更新的示例中,您使用数字ID作为值
要使用选项的文本
,请使用修改后的代码,如下所示:
var table = $('#example').DataTable({
columnDefs: [
{
targets: [0,1,2,3],
render: function(data, type, full, meta){
if(type === 'filter' || type === 'sort'){
var api = new $.fn.dataTable.Api(meta.settings);
var td = api.cell({row: meta.row, column: meta.col}).node();
var $input = $('select, input', td);
if($input.length && $input.is('select')){
data = $('option:selected', $input).text();
} else {
data = $input.val();
}
}
return data;
}
}
],
// ... skipped ...
});
此外,您还需要在数据更改后使单元格数据无效,如下所示(根据)
演示
有关代码和演示,请参阅。是否要为数据表提供列搜索功能?像thisHi@DipakThoke一样,我已经在使用这个,它对其他专栏很有用。这个系统的问题是在一个列中有一个下拉列表!你能用虚拟数据给js fiddle链接你现在正常运行的努力吗。Thanks@DipakThoke是的,这里有JSFIDLE:。正如您所看到的,列状态不会在单击时进行排序。使用multi_filter_select方法都没有。Hi@Gyrocode.com,我知道这个问题很久以前就得到了回答,我最近也将它用作解决方案,但是,当我为选择输入实现此解决方案时,所有选择输入元素都不会触发on change事件,如何通过保留此解决方案使它们再次工作?处的代码也适用于此,但要对显示的文本进行排序,而不是将值(可能是与显示文本的正确顺序无关的int)替换为return$('select',td).val();返回$('option:selected',td).text();多亏了你的回答,我才明白这一点
$('tbody select, tbody input', table.table().node()).on('change', function(){
table.row($(this).closest('tr')).invalidate();
});