Estilo de tabla de datos para que el botón de arranque aparezca en la misma fila que otros elementos

4 minutos de lectura

avatar de usuario
ToddT

Estoy usando el complemento jQuery DataTables y Bootstrap en mi sitio de rieles. No puedo hacer que mi botón personalizado y otros elementos del encabezado de la tabla se aniden en la misma fila. Están apilados en lugar de estar en línea.

¿Alguna sugerencia para ponerlos a todos en la misma línea?

Aquí hay algunos de los JavaScript que he usado:

$(document).ready(function() {
  $('#products').DataTable( {
    dom: 'Blfrtip',
    buttons: [ {
      text: 'Pull my products',
      action: function ( e, dt, node, config ) {
        alert( 'Button activated' );
      }
    }]
  });
});

  • CSS white-space: nowrap;?

    – Roamer-1888

    27 de agosto de 2015 a las 14:51

avatar de usuario
Gyrocode.com

SOLUCIÓN #1

Esta es la parte más confusa con el uso del estilo Bootstrap para jQuery DataTables y hasta ahora no está documentada. La extensión de Bootstrap anula el valor predeterminado dom que se puede confirmar viendo su código fuente.

Tienes que usar especialmente diseñado dom opción similar a la que se muestra a continuación:

dom: 
    "<'row'<'col-sm-3'l><'col-sm-6 text-center'B><'col-sm-3'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",

Puedes ser tan creativo como quieras usando Bootstrap row y col-* clases en el dom opción.

Ver este violín js para código y demostración.

SOLUCIÓN #2

También puede usar el método de inserción directa como se muestra en este ejemplo porque por defecto dom La opción utilizada para el estilo Bootstrap es bastante compleja.

var table = $('#example').DataTable({
   initComplete: function(){
      var api = this.api();

      new $.fn.dataTable.Buttons(api, {
         buttons: [
            {
               text: 'Pull my products',
               action: function ( e, dt, node, config ) {
                  alert( 'Button activated' );
               }
            }
         ]
      });

      api.buttons().container().appendTo( '#' + api.table().container().id + ' .col-sm-6:eq(0)' );  
   }
});

Tenga en cuenta que el código difiere del ejemplo mencionado anteriormente porque hay un tema con DataTables 1.10.9 evitando la inserción directa de botones si no hay B personaje en dom opción o dom No se especifica la opción.

Ver este violín js para código y demostración.

  • Guau… simplemente guau… Gracias Gyrocode… Tiene mucho sentido, pero ¿cómo diablos te diste cuenta de esto? Una última pregunta… ¿Cómo se agrega un segundo botón personalizado en esa misma línea?

    – ToddT

    27 de agosto de 2015 a las 15:26


  • @ToddT, tuvo el mismo problema y lo resolvió al inspeccionar el código fuente de la extensión. jQuery DataTables es una biblioteca excelente, pero desearía que esta parte se documentara mejor.

    – Gyrocode.com

    27 de agosto de 2015 a las 15:27


  • Impresionante… ¿Cómo se agrega un segundo botón personalizado a esa misma línea?

    – ToddT

    27 de agosto de 2015 a las 15:28

  • @ToddT, todavía estoy aprendiendo las nuevas funciones en 1.10.8, pero supongo que debería hacerse como en este violín js.

    – Gyrocode.com

    27 de agosto de 2015 a las 15:31


  • Una vez más… ¡muchas gracias! Lo intenté pero me perdí la coma entre los dos botones…

    – ToddT

    27 ago 2015 a las 15:35

En mi caso acabo de agregar estos estilos:

.dataTables_length,.dataTables_filter {
    margin-left: 10px;
    float: right;
}

Tienes que poner dos divs: uno para los botones de la tabla de datos y otro para tu código personalizado

       var table = $("#tbl_oferta").dataTable({
                dom: '<"pime-grid-button"B><"pime-grid-filter">frtip',
        ...
       });

       $("div.pime-grid-filter").html('<b>Custom tool bar! Text/images etc.</b>');

Luego define la clase div en tu css:

.pime-grid-button{float:left}
.pime-grid-filter{float:left;margin-left:10px}        

Imagen de muestra

Así es como lo hice.

"dom": '<"row"<"col-6"<"d-flex justify-content-start"<""l><"ml-4"i>>><"col-6"<"d-flex justify-content-end"<""f>>>>tp'

También agregue algo de CSS personalizado para que las cosas aparezcan más en línea.

div.dataTables_wrapper div.dataTables_info{
   padding-top: 0.2em !important; 
 }

En mi caso, acabo de agregar este CSS

.dataTables_wrapper .dataTables_length {
    float:left;
    position: absolute;
}
.dataTables_wrapper .dataTables_filter {
    float: right;
}

avatar de usuario
Lajos Arpad

Puede agregar botones en el menú de la barra de herramientas como se muestra a continuación:

        initComplete: function(){
            $("div.toolbar").html('<input type="button");          
        }

luego agregue esta barra de herramientas al elemento DOM de Datatables como se muestra a continuación:

    dom: "<'row'<'col-sm-2'l><'toolbar'><'col-sm-8'f>>" +
                     "<'row'<'col-sm-12'tr>>" +
                     "<'row'<'col-sm-5'i><'col-sm-7'p>>",
                

Uno puede alinear esta barra de herramientas usando css como se muestra a continuación: .toolbar { float: left; margen izquierdo: 60px; }

avatar de usuario
Asad Alí

Eche un vistazo a la documentación de DataTable Aquí.

prueba esto dom: '<"toolbar">frtip'

  • Sí, incluso ese ejemplo apila la barra de búsqueda y el texto que insertaron… ver aquí live.datatables.net/coqisori/1

    – ToddT

    27 de agosto de 2015 a las 15:05


  • .toolbar { float: left; } Agrega esto. mal trabajo como un encanto.

    – Asad Alí

    27 de agosto de 2015 a las 15:07


  • Eso no funcionará correctamente con el estilo Bootstrap. Además te perdiste el B opción.

    – Gyrocode.com

    27 de agosto de 2015 a las 15:12


¿Ha sido útil esta solución?