数据表列 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>' );
} );
我正在使用数据表列 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>' );
} );