2012-06-11 51 views
17

tengo un estilo realmente agradable para mis tablas.DataTables: cómo configurar clases para celdas de fila de tabla (¡pero no para celdas de encabezado de tabla!)

{enlaces siento no más de trabajo}

he tenido que añadir Sclass para que las nuevas filas (agregadas por fnAddData) reciben las clases correctas.

Desafortunadamente eso arruina mi diseño, ¡porque estas clases también se agregan a mis celdas de encabezado de tabla!

{enlaces siento no más de trabajo}

¿Cómo puedo configurar Sclass aplicar sólo para las células TBODY?

Para aclarar:

var rolesTable = $('#roles').dataTable({ 
     "aoColumns": [ 
     { "mDataProp": "id", "sClass": "avo-lime-h avo-heading-white" }, 
     { "mDataProp": "name", "sClass": "avo-light" }, 
     { "mDataProp": "module", "sClass": "avo-light" }, 
     { "mDataProp": "description", "sClass": "avo-light" }, 
     { "mDataProp": null, "bSearchable": false, "bSortable": false, 
      "sDefaultContent": '<button type="button" name="add" class="btn"><i class="icon-plus icon-white"></i></button>' }, 
     ], 
    }); // end od dataTable 

De esta manera cuando llamo

rolesTable.fnAddData({ 
    "id": 10, 
    "name": "testname", 
    "module": "testmodule", 
    "description": "testdescription" 
}); 

entonces la fila añadida es así:

<tr> 
    <td class="avo-lime-h avo-heading-white">10</td> 
    <td class="avo-light">testname</td> 
    <td class="avo-light">testmodule</td> 
    <td class="avo-light">testdescription</td> 
    <td></td> 
</tr> 

y que es perfectamente OK

** ** el problema es que este ajuste también se suma a estas clases:

<thead> 
    <tr> (...) </tr> 
</thead> 

células cabeza mesa ... lo que no quiero

+0

Por favor, publique el código relevante para la pregunta. Idealmente, ** además ** del código en el cuerpo de la pregunta en sí, agregue un ejemplo [jsFiddle] (http://jsfiddle.net/api/post/jquery/1.7.1/) de su problema. Nos ayudará a ayudarte. –

+0

no sabía que puedo marcar "aceptado" sin votar una respuesta ... y hasta hace poco mi puntaje era demasiado bajo como para poder votar – loostro

Respuesta

30

solución a mi problema era: utilizando fnRowCallback en lugar de sClass para establecer clases en nuevas filas.

var rolesTable = $('#roles').dataTable({ 
     "aoColumns": [ 
     { "mDataProp": "id" }, 
     { "mDataProp": "name" }, 
     { "mDataProp": "module" }, 
     { "mDataProp": "description" }, 
     { "mDataProp": null, "bSearchable": false, "bSortable": false, 
      "sDefaultContent": '<button type="button" name="add" class="btn btn-round"><i class="icon-plus icon-white"></i></button>' }, 
     ], 
     "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
      $('td:eq(0)', nRow).addClass("avo-lime-h avo-heading-white"); 
      $('td:eq(1),td:eq(2),td:eq(3)', nRow).addClass("avo-light"); 
     } 
    }); // end od dataTable 
+3

El problema con este código es que estás tratando de 'addClass' en cada sorteo de la mesa. Esto podría conducir a problemas de rendimiento en algunos escenarios. Una mejor solución sería agregar la clase después de la tabla init y después de agregar datos dinámicamente. Vea el hilo [aquí] (http://datatables.net/forums/discussion/comment/34602) para la discusión. – gamliela

6

Dado que sólo está utilizando Sclass a aplicar un estilo a la mesa de la simple solución a su problema consiste en modificar el CSS sí a aplicarse únicamente a los elementos td.

viejo estilo CSS:

.avo-light { 
    color: blue; 
} 

nuevo estilo CSS:

td.avo-light { 
    color: blue; 
} 

De esta manera la CSS solo tendrá efecto en las células de su interés en aplicar el estilo a pesar de Sclass siendo aplicada a th elementos también.

Me doy cuenta de que esta pregunta es un poco antigua, pero me parece mucho más modular que la mejor solución.

2
let table = $("#myTable").dataTable(); 
    table.rows().every(function(rowIdx, tableLoop, rowLoop){ 
    $(this.node().cells[0]).addClass('red'); 
    $(this.node().cells[1]).addClass('blue'); 
    } 

Después de que se pronuncie la mesa, iterar a través de todas las filas con el selector de JavaScript de cada fila y hacer los cambios que desea. Esto aborda las preocupaciones de rendimiento planteadas por gamliela en la respuesta de Loostr. DataTables rows().every() documentation

+1

funcionó para mí. Estaba cargando datos a través de Ajax, así que tuve que ajustar esto con initComplete - https://datatables.net/reference/option/initComplete – raison

Cuestiones relacionadas