Изменить сценарий таблицы Jquery, чтобы отфильтровать только один столбец, а не все столбцы - PullRequest
0 голосов
/ 30 января 2012

Я использую скрипт jquery под названием datatables http://datatables.net/, чтобы отобразить некоторые данные, извлекаемые из моей базы данных. Я изменил пример, показанный здесь для моей таблицы http://datatables.net/release-datatables/examples/api/multi_filter_select.html , Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я помещаю фильтр в каждый отдельный столбец, есть ли способ изменить это так, чтобы в столбце моей таблицы с именем Reps был только фильтр? Если есть необходимость, нужно ли применить к этому столбцу класс с именем «Reps» или я могу использовать верхний / нижний колонтитул столбца, чтобы указать, что нужно фильтровать только этот конкретный столбец?.

    (function($) {
    /*
     * Function: fnGetColumnData
     * Purpose:  Return an array of table values from a particular column.
     * Returns:  array string: 1d data array
     * Inputs:   object:oSettings - dataTable settings object. This is always the last argument past to the function
     *           int:iColumn - the id of the column to extract the data from
     *           bool:bUnique - optional - if set to false duplicated values are not filtered out
     *           bool:bFiltered - optional - if set to false all the table data is used (not only the filtered)
     *           bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array
     * Author:   Benedikt Forchhammer <b.forchhammer /AT\ mind2.de>
     */
    $.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) {
        // check that we have a column id
        if ( typeof iColumn == "undefined" ) return new Array();

        // by default we only wany unique data
        if ( typeof bUnique == "undefined" ) bUnique = true;

        // by default we do want to only look at filtered data
        if ( typeof bFiltered == "undefined" ) bFiltered = true;

        // by default we do not wany to include empty values
        if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true;

        // list of rows which we're going to loop through
        var aiRows;

        // use only filtered rows
        if (bFiltered == true) aiRows = oSettings.aiDisplay;
        // use all rows
        else aiRows = oSettings.aiDisplayMaster; // all row numbers

        // set up data array   
        var asResultData = new Array();

        for (var i=0,c=aiRows.length; i<c; i++) {
            iRow = aiRows[i];
            var aData = this.fnGetData(iRow);
            var sValue = aData[iColumn];

            // ignore empty values?
            if (bIgnoreEmpty == true && sValue.length == 0) continue;

            // ignore unique values?
            else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue;

            // else push the value onto the result data array
            else asResultData.push(sValue);
        }

        return asResultData;
    }}(jQuery));


    function fnCreateSelect( aData )
    {
        var r='<select><option value=""></option>', i, iLen=aData.length;
        for ( i=0 ; i<iLen ; i++ )
        {
            r += '<option value="'+aData[i]+'">'+aData[i]+'</option>';
        }
        return r+'</select>';
    }


    $(document).ready(function() {
        /* Initialise the DataTable */
        var oTable = $('#dashboard').dataTable( {
          "bJQueryUI": true,

            "bInfo": true,

            "bAutoWidth": true,

            "bFilter": true,

            "bLengthChange": true,

            "bPaginate": true,

            "bProcessing": true,

             "bSort": true,

              "sPaginationType": "full_numbers",

               "aaSorting": [[ 9, "desc" ]],

                "iDisplayLength": 5,

                "bLengthChange": false   
        } );

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

1 Ответ

1 голос
/ 30 января 2012

Вы можете использовать метод eq(), чтобы выбрать элемент по определенному индексу. Сокращает набор совпадающих элементов до набора по указанному индексу.

например. Если вы хотите выбрать второй столбец из таблицы, вы можете сделать это.

$('table thead th').eq(1);

Вы также можете использовать псевдо-селектор, чтобы выбрать элемент по указанному индексу.

$('table thead th:eq(1)');

Ссылка: eq() - http://api.jquery.com/eq/ :eq() - http://api.jquery.com/eq-selector/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...