Раскрывающийся фильтр jquery datatables

Вот мой код:

$(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 );
        } );
    } );        
} );

Im, используя плагин dqatables jquery, он работает отлично, как в этом примере:

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

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

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

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

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

Ответы

Ответ 1

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

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 );
      } );
    }
} );   

Ответ 2

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

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

Ответ 4

Вы можете использовать плагин 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" }
                ]

        });
});

Ответ 5

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

$("thead th").each( function ( i ) {
    if(i==1)
    {
        this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) );
        $('select', this).change( function () {
            oTable.fnFilter( $(this).val(), i );
        } ); 
    }
} );  

Ответ 6

Возможно, времена изменились, но без плагина и 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