jQuery DataTables две строки в заголовке: имена столбцов первой строки и сортировка, фильтрация второй строки - PullRequest
15 голосов
/ 17 марта 2012

В более старых версиях 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/?

Ответы [ 2 ]

16 голосов
/ 17 марта 2012

Автор jQuery DataTables Аллан Джардин указал простой способ сделать это: используйте опцию bSortCellsTop, доступную с версии 1.8.

http://datatables.net/ref#bSortCellsTop

(http://datatables.net/ref)

http://datatables.net/forums/discussion/9046/two-rows-in-thead-first-row-for-sorting-second-row-for-column-filtering

+ 1 для jQuery DataTables!

1 голос
/ 10 сентября 2016

Я много об этом искал для лучшего решения и создал приведенный ниже код. Здесь вы можете выбирать между списком и полями поиска, используя соответствующие имена классов в ячейках заголовка таблицы. Кнопки сортировки и имена столбцов находятся в первом ряду, параметры фильтрации - во втором ряду.

<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>
...