Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery Datatables在列中对select进行排序_Javascript_Jquery_Sorting_Datatables - Fatal编程技术网

Javascript JQuery Datatables在列中对select进行排序

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')或排

我使用的是DataTables 1.10.12和JQuery 1.12.3

我对包含下拉列表的列排序有问题

我正在使用多重选择过滤器

一切正常,问题是它无法对包含select(that has selected=“selected”选项)的列进行排序,可能是因为我不知道如何填充multi_select中选项标记的值

那么,我如何在td内部(可能是使用regex)进行搜索,找到那些选定的选项呢?

解决方案 您可以使用在选项中使用基于零的索引以特定列为目标,并在搜索(
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();
});