2012-03-08 42 views
14

Aquí está mi código:desplegables tablas de datos jquery filtro

$(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 usando el plugin tablas de datos jQuery, su funcionamiento perfectamente al igual que este ejemplo:

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

lo que me gustaría hacer es en lugar de tener un menú desplegable para cada columna, me gustaría un menú desplegable solo en una columna específica.

así que supongo que tengo que cambiar:

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

pero no estoy seguro de qué poner. Cualquier ayuda sería muy apreciada, gracias de antemano.

+1

Creo que el uso de 'i' se puede controlar la columna que desea mostrar en –

Respuesta

8

Si necesita sólo en una columna que podría hacer

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

, tan fácil cuando se piensa en ello:) ¿Puedo darle un título al menú desplegable? como .... Seleccione – Codded

+1

@Codded in 'fnCreateSelect' replace var' r = '' , ' –

+0

No estoy encendido hoy, podría haber funcionado ese :) Gracias por la ayuda – Codded

1

creo que algo como siguiente podría hacer el truco

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

Gracias, he utilizado la otra respuesta, pero esto funcionaría aswel :) Gracias – Codded

2

Usted puede utilizar el plugin 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" } 
       ] 

     }); 
}); 
18

También puede crear su propia lista de selección y la posición donde le parezca fuera de la tabla.

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

Esto en mi opinión es la mejor respuesta y uso – We0

+0

esto supone que usted ya conoce los valores de esa columna, a veces no es el caso – zizoujab

+0

Pero si bStateSave se establece en verdadero, usted no obtener el valor seleccionado después de actualizar –

1

Tal vez los tiempos han cambiado, pero sin plugin y utilizando dataTables1.10.12 y es @api, como una persona en los comentarios sugirió, puede utilizar el número entero índice basado en cero a partir de una matriz para la tabla correspondiente. Código de ejemplo, los bits importantes están en la línea 2 a continuación. Estoy buscando solo en la cuarta columna, y esto es coffeescript pero entiendes la idea.

$('#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 
Cuestiones relacionadas