Ниспадающий фильтр jquery datatables - PullRequest
17 голосов
/ 08 марта 2012

Вот мой код:

$(document).ready(function() {
    /* Initialise the DataTable */
    var oTable = $('#example').dataTable({
        "oLanguage": {
            "sSearch": "Search all columns:"
        },
        "iDisplayLength": 10,
        "bJQueryUI": true,
        "sPaginationType": "full_numbers",
        "bFilter": true,
    }); 

    /* Add a select menu for each TH element in the table footer */
    $("thead th").each( function ( i ) {
        this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) );
        $('select', this).change( function () {
            oTable.fnFilter( $(this).val(), i );
        } );
    } );        
} );

Я использую плагин jquery datatables, он отлично работает, как в этом примере:

http://www.datatables.net/release-datatables/examples/api/multi_filter_select.html

Что бы я хотелвместо того, чтобы иметь выпадающий список для каждого столбца, я бы хотел выпадающий список только для одного конкретного столбца.

Поэтому я предполагаю, что мне нужно изменить:

$("thead th").each( function ( i ) {

Но я не уверенчто поставить.Любая помощь будет высоко ценится, спасибо заранее.

Ответы [ 6 ]

19 голосов
/ 17 июля 2013

Вы также можете создать свой собственный список выбора и расположить его где угодно за пределами таблицы.

<select id="mySelect">
    <option value=""></option>
    <option value="1">1</option>
    ...
</select>

<script>
    $('#mySelect').on('change',function(){
        var selectedValue = $(this).val();
        oTable.fnFilter("^"+selectedValue+"$", 0, true); //Exact value, column, reg
    });
<script>
10 голосов
/ 08 марта 2012

Если вам нужен только один столбец, вы можете сделать

var indexOfMyCol = 2;//you want it on the third column
$("thead th").each( function ( i ) {
    if(i === indexOfMyCol){ 
      this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) );
      $('select', this).change( function () {
        oTable.fnFilter( $(this).val(), i );
      } );
    }
} );   
3 голосов
/ 12 ноября 2016

Может быть, времена изменились, но без плагина и с использованием dataTables 1.10.12 и это @api, поскольку в комментариях предлагается, вы можете использовать целочисленное индексное целое число из массива длясоответствующая таблица.Пример кода, важные биты находятся в строке 2 ниже.Я ищу только в 4-м столбце, и это coffeescript, но вы поняли.

    $('#example').DataTable initComplete: ->
                    @api().columns([3]).every ->
                            column = this
                            select = $('<select><option value="">Sort Column(All)</option></select>').appendTo($(column.header()).empty()).on('change', ->
                                    val = $.fn.dataTable.util.escapeRegex($(this).val())
                                    column.search(val ? '^'+val+'$' : '', true, false).draw()
                                    return
                            )
                            column.data().unique().sort().each (d, j) ->
                                    select.append '<option value="' + d + '">' + d + '</option>'
                                    return
                            return
                    return
2 голосов
/ 19 июля 2012

Вы можете использовать плагин columnfilter ...

$(document).ready(function(){
     $('#example').dataTable()
          .columnFilter({
            aoColumns: [ { type: "select", values: [ 'Gecko', 'Trident', 'KHTML', 'Misc', 'Presto', 'Webkit', 'Tasman']  },
                     { type: "text" },
                     null,
                     { type: "number" },
             { type: "select" }
                ]

        });
});
2 голосов
/ 08 марта 2012

Вы можете использовать фильтр столбцов таблиц дат, см. http://jquery -datatables-column-filter.googlecode.com / svn / trunk / customFilters.html

Это плагин второго уровнядля данных.

Йован

1 голос
/ 08 марта 2012

Я думаю, что что-то вроде следующего могло бы сработать

$("thead th").each( function ( i ) {
    if(i==1)
    {
        this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) );
        $('select', this).change( function () {
            oTable.fnFilter( $(this).val(), i );
        } ); 
    }
} );  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...