Ответ 1
jQuery DataTables автор Allan Jardine указал на простой способ сделать это:
используйте опцию bSortCellsTop
, доступную с версии 1.8.
http://datatables.net/ref#bSortCellsTop
+1 для jQuery DataTables!
В более старых версиях datatables (до 1,7.?), я имел обыкновение иметь таблицу с двумя строками заголовок столбца, где сортировка выполнялась в верхней строке и включала имя столбца, а фильтрация с входами и выборами была выполнена во второй строке.
<table>
<thead>
<tr>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3</th>
</tr>
<tr>
<td><input type="text" /></td>
<td><select><option ....></select></td>
<td><input type="text" /></td>
</tr>
</thead>
<tbody>...
С более высокими версиями, включая последние версии (1.9.0), это больше не работает, потому что сортируемый заголовок применяется к второй строке вместо первой строки. Есть ли способ заставить это работать, не прибегая к дополнительному подключаемому модулю, например http://code.google.com/p/jquery-datatables-column-filter/?
jQuery DataTables автор Allan Jardine указал на простой способ сделать это:
используйте опцию bSortCellsTop
, доступную с версии 1.8.
http://datatables.net/ref#bSortCellsTop
+1 для jQuery DataTables!
Я много ищу об этом для лучшего решения и создал приведенный ниже код. Здесь вы можете выбирать между полями combo и search, используя соответствующие имена классов в ячейках заголовка таблицы. Кнопки сортировки и имена столбцов находятся в первой строке, параметры фильтрации находятся во второй строке.
<table id="example" width="100%">
<thead>
<tr>
<th>Sıra</th>
<th>SKU</th>
<th>Stok Adı</th>
<th>Ana Kategori</th>
<th>Alt Kategori</th>
<th>Stok Adedi</th>
<th>Alt Limit</th>
<th>Son Giriş Tarihi</th>
<th>Son Giriş Adedi</th>
<th>Stok Yaşı</th>
</tr>
<tr class="filter">
<th class="combo"></th>
<th class="combo"></th>
<th class="combo"></th>
<th class="search"></th>
<th class="search"></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>S49996</td>
<td>A4-Tech Q Klavye Siyah Ps2 (KM720)</td>
<td>Ofis Elektroniği</td>
<td>Klavye - Mouse</td>
<td>25</td>
<td>10</td>
<td>10-10-2015</td>
<td>78</td>
<td>89</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
$(document).ready(function() {
var table = $('#example').DataTable({
"bPaginate": false,
"bLengthChange": false,
"bFilter": true,
"bInfo": false,
"bAutoWidth": false,
"bSortCellsTop": true,
"scrollY": "300px",
"scrollCollapse": true,
initComplete: function () {
this.api().columns().every( function () {
var column = this;
var columnIndex = this.index();
switch ($(".filter th:eq("+columnIndex+")").attr('class')) {
case 'combo':
var select = $('<select style="width:100%;"><option value=""></option></select>')
.appendTo( $(".filter th:eq("+columnIndex+")").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 ) {
select.append( '<option value="'+d+'">'+d+'</option>' )
});
break;
case 'search':
$(".filter th:eq("+columnIndex+")").html( '<input type="text" />' );
$( 'input', $(".filter th:eq("+columnIndex+")") ).on( 'keyup change', function () {
if ( column.search() !== this.value ) {
column
.search( this.value )
.draw();
}
});
break;
}
} );
}
});
});
</script>