2012-01-31 981 views
11

Soy nuevo en las tablas de datos - http://datatables.net/ -. Tengo problemas para encontrar un ejemplo de cómo podría cambiar el color de fondo de una celda en función de su posición y contenido.cambiar el fondo de la celda de jquery datatable según el contenido

Algo como esto funcionó para mí, excepto que el resaltado de la fila seleccionada ahora es 'overcolored' en las celdas que han cambiado el color de fondo. Si pudiera obtener el nombre de clase de la fila en fnRowCallback, podría manejarlo.

$(document).ready(function() { 

    // Add a click handler to the rows - this could be used as a callback 
    $("#example tbody").click(function(event) { 

     $(oTable.fnSettings().aoData).each(function() { 
     $(this.nTr).removeClass('row_selected'); 
     }); 
     (event.target.parentNode).addClass('row_selected'); 
    }); 


    oTable = $('#example').dataTable({ 

     "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 

     $(nRow).children().each(function(index, td) { 

      if (index == 6) { 

       if ($(td).html() === "pending") { 
        $(td).css("background-color", "#078DC6"); 
       } else if ($(td).html() === "rendering") { 
        $(td).css("background-color", "#FFDE00"); 
       } else if ($(td).html() === "success") { 
        $(td).css("background-color", "#06B33A"); 
       } else if ($(td).html() === "failure") { 
        $(td).css("background-color", "#FF3229"); 
       } else { 
        $(td).css("background-color", "#FF3229"); 
       } 
      } 
     }); 
     return nRow; 
     }, 
     "bProcessing": true, 
     "bServerSide": true, 
     "sAjaxSource": "scripts/server_processing.php", 
     "sPaginationType": "full_numbers", 
    }); 
}); 
+0

Probablemente vamos a necesitar al menos una idea de algo que específicamente desee. ¿Puedes darnos algunos ejemplos? –

+0

Tengo algo como lo siguiente. Me gustaría establecer el fondo de las celdas de la sexta columna en función del contenido de la celda, p. Ej. si el contenido es "A", me gustaría configurar el fondo en rojo. oTable = $ ('# ejemplo') dataTable ({ \t \t "bProcessing":. Verdadera, \t \t "bServerSide": true, \t \t "sAjaxSource": "scripts/server_processing.php", \t " sPaginationType ":" full_numbers " \t}); –

Respuesta

2
$('table:last tr:nth-child(2) td:nth-child(2)'). 
    css("background-color", "#cccccc"); 
+0

Gracias por la respuesta. Funciona, puedo cambiar el color de fondo, pero desafortunadamente no estoy seguro de en qué datatables callback podría obtener el contenido de la celda y cómo. –

+0

fnGetData, fnUpdate, http://datatables.net/api –

0

No he probado esto, pero algo como esto debe darle una idea:

// Change i-th row j-th column 
var rows = document.getElementById("myTable").getElementsByTagName('tr'); 
var columns = rows[i].getElementsByTagName('td'); 
jQuery(columns[j]).css("background-color", "#cccccc"); 
6

Sé que la pregunta ya fue contestada, pero pensé que iba a compartir la forma en que estaba capaz de aplicar "formato condicional" de géneros a varias celdas, de la siguiente manera:

En primer lugar, agregué una clase a cada columna durante la inicialización de mi datatables:

"aoColumns": [{ 
       "mDataProp": "serial", 
       "sClass": "serial" 
      }, { 
       "mDataProp": "us", 
       "sClass": "us" 
      }...], 

A continuación, he creado una función addFormat() que se llama cada redibujado (tuve que hacerlo de esta manera porque tengo una mesa en vivo que las actualizaciones en tiempo real):

"fnDrawCallback": function(oSettings) { addFormat(); }, 

En el addFormat función, esencialmente definí todas mis reglas de formato, a través de clases de CSS. Usé un jQuery :contains extension para aplicar reglas muy específicas con expresiones regulares y cosas por el estilo. Mis selectores para estas reglas serían td y cualquiera que sea la clase I habían asignado a una columna de tablas de datos durante la inicialización:

$("td.us:containsRegex(/^[xtfv]$/)").addClass("s4 queue"); 

que funcionó muy bien para mí.

4

Puede cambiar el color de fondo de la celda respectiva dinámica del valor de la celda por

{"mData": "index", "sClass": "center" ,"fnRender": function(obj) { 
               var index = obj.aData.index; 
               var isActive = obj.aData.isActivated; 
               if(isActive == true){ 
                obj.oSettings.aoColumns[obj.iDataColumn].sClass = "greenBackground" 
               }else{ 
                obj.oSettings.aoColumns[obj.iDataColumn].sClass = "yellowBackground" 
               } 
               return index; 
              } }, 
+0

Esto funcionó muy bien, pero tuve que cambiar: obj.oSettings.aoColumns [obj.iDataColumn] .sClass = "greenBackground" a: obj.settings.aoColumns [obj .iDataColumn].sClass = "greenBackground" – itsNotABlanket

+0

Quiero hacer algo similar. agregue css que obtengo del código y lo guardo en propiedad a otra propiedad. – coder771

0

Así es como a Estilo condicionalmente las células a través de createdCell, utilizando DataTables 1.10+ syntax.

"columnDefs": [ 
{ 
     "targets": [6], 
     "createdCell": function(td, cellData, rowData, row, col) { 
      var color; 
      switch(cellData) { 
      case "pending": 
       color = '#078DC6'; 
       break; 
      case "success": 
       color = '#FFDE00'; 
       break; 
      case "failure": 
       color = '#06B33A'; 
       break; 
      default: 
       color = '#FF3229'; 
       break; 
      } 
      $(td).css('background',color); 
     } 
    } 
], 
Cuestiones relacionadas