数据表列 select 过滤器排序()在列有 link 时不起作用

Datatable column select filter sort() not working when column have link

我正在使用数据表列 select 过滤器。在其中一列中,我有 html link 标记,这导致在顶部显示未排序的 select 选项

<th><a href="{{route('customer.information', $customer->id)}}">{{ $customer->name }}</a></th>
<script>
      $(document).ready(function() {
      $('#colSearch').DataTable( {
         "order": [],

         initComplete: function () {
            this.api().columns([0,1,2,3,4,5,6]).every( function () {
               var column = this;
               var colTitle = this.header().innerHTML;
               var select = $('<select><option value="">Select ' + colTitle + '</option></select>')
                  .appendTo( $(column.footer()).empty() )
                  .on( 'change', function () {
                     var val = $.fn.dataTable.util.escapeRegex(
                        $(this).val()
                     );

                     column
                        .search( val ? '^'+val+'$' : '', true, false )
                        .draw();
                  } );

               column.data().unique().sort().each( function ( d, j ) {
                  var val = $('<div/>').html(d).text();
                  select.append( '<option value="' + val + '">' + val + '</option>' );
               } );
            } );
         }
      } );
   } );
   </script>

您可以查看示例数据表http://live.datatables.net/cikaqoxe/1/

这是因为:

(1) column.data() 提取每个列单元格的全部内容 - 包括可能也存在于单元格中的任何 HTML。

(2) 然后您正在对提取的数据进行排序。因此,您实际上没有使用 Tiger Nixon 进行排序,而是使用 <a href="">Tiger Nixon</a>.

要解决此问题,您可以等到删除 HTML 后再对数据进行排序。例如:

var opts = [];
column.data().unique().each( function ( d, j ) {
  opts.push( $('<div/>').html(d).text() );          
} );
opts.sort();
opts.forEach(function (item, index) {
  select.append( '<option value="' + item + '">' + item + '</option>' );
} );