Saltar al contenido

DataTables busca contenido de fila secundaria

Poseemos la mejor información que hallamos por todo internet. Queremos que te sea de mucha ayuda y si puedes comentarnos algo que nos pueda ayudar a mejorar hazlo libremente.

Solución:

SOLUCIÓN

Para que jQuery DataTables busque filas secundarias, debe agregar los datos que se muestran en las filas secundarias a la tabla principal como columnas ocultas.

Por ejemplo, puede agregar una columna oculta para extn propiedad de datos usando columns.visible opción como se muestra a continuación:

JavaScript:

    "columns": [
        
            "class":          'details-control',
            "orderable":      false,
            "data":           null,
            "defaultContent": ''
        ,
         "data": "name" ,
         "data": "position" ,
         "data": "office" ,
         "data": "salary" ,
         "data": "extn", "visible": false             
    ],

HTML:


    
        
        Name
        Position
        Office
        Salary
        Extn.
    

MANIFESTACIÓN

Vea este jsFiddle para código y demostración. Buscar 5407 y la primera fila se mostrará aunque los datos aparezcan solo en la fila secundaria.

Tengo que preguntar: ¿Qué le hace creer que puede buscar en el contenido de la fila secundaria que está inyectando dinámicamente solo cuando se muestran las filas secundarias? ¿Y cómo debería un column() la búsqueda podría cubrir el contenido de otras filas, ¿alguna vez?

Cuando se dice esto, por supuesto que hay una solución. En lugar de crear el contenido de la fila secundaria una y otra vez, manténgalo en un array :

var details = [];

Ahora, cuando está inicializando la tabla, también inicializa el contenido de la fila secundaria:

...
columns: [
   className: 'details-control',
   orderable: false,
   data: null,
   defaultContent: '',
   render: function(data, type, row, meta)   
      details[meta.row] = format(data);
       
, 
...

En la función format(), agregue una clase al campo Número de extensión para facilitar el acceso:

'' + d.extn + '' +

Cuando muestre filas secundarias, inserte el contenido renderizado previamente de details[] en lugar de llamar format() :

if (row.child.isShown()) 
   row.child.hide();
   tr.removeClass('shown');
 else 
   row.child(details[row.index()]).show();            
   tr.addClass('shown');

Cree un filtro que devuelva solo las filas que tienen un details[] fila secundaria con un determinado número de extensión:

function filterByDetailsExtNo(extNo) 
    $.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) 
       return $(details[dataIndex]).find('.extNo').text() == extNo;
        
  )
  table.draw();
  $.fn.dataTable.ext.search.pop();
  

Use ese filtro personalizado en lugar del column() busque en sus controladores de entrada:

table.columns().every( function () 
    $( 'input', this.footer() ).on( 'keyup change', function () 
        filterByDetailsExtNo(this.value);
    );
);

violín bifurcado -> https://jsfiddle.net/7o67vhrz/


Actualizar. Para aplicar el filtro anterior al cuadro de búsqueda general:

$('.dataTables_filter input')
   .off()
   .on('keyup', function() 
      filterByDetailsExtNo(this.value);
   );    

otro violín bifurcado -> https://jsfiddle.net/ds3qp41g/


último ejemplo. Combine la búsqueda de detalles y la búsqueda “nativa”

function filterByDetailsExtNoAndInput(term) 
      $.fn.dataTable.ext.search.push(
        function(settings, data, dataIndex) 
            if ($(details[dataIndex]).find('.extNo').text() == term) return true;
            for (var i=0;i=0) 
                    return true
                    
               
            return false;
            
      )
      table.draw();
      $.fn.dataTable.ext.search.pop();
      

violín -> https://jsfiddle.net/h2u4fowj/

Puntuaciones y comentarios

Si te apasiona la programación, puedes dejar un escrito acerca de qué te ha impresionado de este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *