Disabilita l'ordinamento per una particolare colonna in DataTables jQuery


156

Sto usando il plug- in jQuery DataTables per ordinare i campi della tabella. La mia domanda è: come disabilitare l'ordinamento per una determinata colonna? Ho provato con il seguente codice, ma non ha funzionato:

"aoColumns": [
  { "bSearchable": false },
  null
]   

Ho anche provato il seguente codice:

"aoColumnDefs": [
  {
    "bSearchable": false,
    "aTargets": [ 1 ]
  }
]

ma ciò non ha ancora prodotto i risultati desiderati.


1
Ho modificato la mia risposta, con un'opzione in cui è possibile impostare le colonne di disabilitazione nella definizione TH.
Paulo Fidalgo,

Disabilitare il pulsante usando css. dai un'occhiata a questa pagina. datatables.net/forums/discussion/21164/...
Eugine Joseph

potresti anche voler guardare cbabhusal.wordpress.com/2015/05/20/…
illusionista

Risposte:


176

Questo è quello che stai cercando:

$('#example').dataTable( {
      "aoColumnDefs": [
          { 'bSortable': false, 'aTargets': [ 1 ] }
       ]
});

3
questo ha funzionato per me. Se si desidera ordinare la prima colonna, "aTargets": [-1], per la seconda "aTargets": [1], per la terza "aTargets": [2] e così via.
Lasang,

5
puoi semplicemente fare 'aTargets': [1, 2]
Adrien Be

2
@Lasang - Hai davvero dire [-1], poi [1], [2]ecc? Che cosa -1significa? L'indicizzazione per le colonne non inizia 1per dataTables?
Dan Nissenbaum,

1
-1è l'indice che conta dalla fine della tabella. ( -1è l'ultima colonna della tabella)
Ramy Nasr,

1
A partire da DataTables 1.10.5 è ora possibile definire le opzioni di inizializzazione utilizzando gli attributi data- * HTML5. Vedi stackoverflow.com/a/32281113/1430996
Jeromy French

87

A partire da DataTables 1.10.5 è ora possibile definire le opzioni di inizializzazione utilizzando gli attributi data- * HTML5.

-da DataTable esempio - HTML5 data-* Attributi - Opzioni tabella

Così si può utilizzare data-orderable="false"sul thdella colonna non si vuole essere ordinabili. Ad esempio, la seconda colonna "Avatar" nella tabella seguente non sarà ordinabile:

<table id="example" class="display" width="100%" data-page-length="25">
    <thead>
        <tr>
            <th>Name</th>
            <th data-orderable="false">Avatar</th>
            <th>Start date</th>
            <th>Salary</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Tiger Nixon</td>
            <td><img src="https://www.gravatar.com/avatar/8edcff60cdcca2ad650758fa524d4990?s=64&amp;d=identicon&amp;r=PG" alt="" style="width: 64px; height: 64px; visibility: visible;"></td>
            <td>2011/04/25</td>
            <td>$320,800</td>
        </tr>
        <tr>
            <td>Garrett Winters</td>
            <td><img src="https://www.gravatar.com/avatar/98fe9834dcca2ad650758fa524d4990?s=64&amp;d=identicon&amp;r=PG" alt="" style="width: 64px; height: 64px; visibility: visible;"></td>
            <td>2011/07/25</td>
            <td>$170,750</td>
        </tr>
        ...[ETC]...
    </tbody>
</table>

Guarda un esempio funzionante su https://jsfiddle.net/jhfrench/6yxvxt7L/ .


9
IMO, questa è la risposta migliore qui, approccio più semplice ed elegante
Hamman Samuel

2
Questo disabilita la funzionalità di ordinamento, ma ho scoperto (in 1.10.12) che la colonna è ancora ordinata per impostazione predefinita quando viene inizializzata la DataTable, che modella la colonna con un glifo di ordinamento crescente. Se non lo desideri, puoi inizializzare il datatable senza ordinarlo in questo modo: $ ('# esempio'). DataTable ({'order': []});
Brian Merrell,

@BrianMerrell Wellllllll ... guarda quello! jsfiddle.net/ja0ty8xr Dovresti aprire un problema GitHub per quel comportamento. :)
Jeromy French,

64

Per disabilitare l'ordinamento di una prima colonna, provare con il codice seguente in jquery di database. Il valore null rappresenta l'abilitazione dell'ordinamento qui.

$('#example').dataTable( {
  "aoColumns": [
  { "bSortable": false },
  null,
  null,
  null
  ]
} );

Disabilita l'ordinamento su una colonna in jQuery Datatables


@Paulraj Il link è interrotto, ti dispiacerebbe cambiarlo?
taufique,

1
A partire da DataTables 1.10.5 è ora possibile definire le opzioni di inizializzazione utilizzando gli attributi data- * HTML5. Vedi stackoverflow.com/a/32281113/1430996
Jeromy French

60

Usando i Datatables 1.9.4 Ho disabilitato l'ordinamento per la prima colonna con questo codice:

/* Table initialisation */
$(document).ready(function() {
    $('#rules').dataTable({
        "sDom" : "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
        "sPaginationType" : "bootstrap",
        "oLanguage" : {
            "sLengthMenu" : "_MENU_ records per page"
        },
        // Disable sorting on the first column
        "aoColumnDefs" : [ {
            'bSortable' : false,
            'aTargets' : [ 0 ]
        } ]
    });
});

MODIFICARE:

Puoi disabilitare anche usando la no-sortclasse sul tuo <th>,

e usa questo codice di inizializzazione:

// Disable sorting on the no-sort class
"aoColumnDefs" : [ {
    "bSortable" : false,
    "aTargets" : [ "no-sort" ]
} ]

MODIFICA 2

In questo esempio sto usando Datables con Bootstrap, seguendo un vecchio post sul blog. Ora c'è un collegamento con materiale aggiornato sullo stile dei dati con bootstrap .


@larrylampco Ho aggiornato il post con collegamenti aggiornati.
Paulo Fidalgo,

Grazie .. che dire della perdita di CSS quando applichiamo l'ordinamento
Shanker Paudel,

1
A partire da DataTables 1.10.5 è ora possibile definire le opzioni di inizializzazione utilizzando gli attributi data- * HTML5. Vedi stackoverflow.com/a/32281113/1430996
Jeromy French

27

Quello che uso è solo aggiungere un attributo personalizzato nel thd td e controllare l'ordinamento controllando automaticamente quel valore attr.

Quindi sarà il codice HTML

<table class="datatables" cellspacing="0px" >

    <thead>
        <tr>
            <td data-bSortable="true">Requirements</td>
            <td>Test Cases</td>
            <td data-bSortable="true">Automated</td>
            <td>Created On</td>
            <td>Automated Status</td>
            <td>Tags</td>
            <td>Action</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>

E JavaScript per l'inizializzazione dei database sarà (otterrà dinamicamente le informazioni di ordinamento dalla tabella stessa;)

$('.datatables').each(function(){
    var bFilter = true;
    if($(this).hasClass('nofilter')){
        bFilter = false;
    }
    var columnSort = new Array; 
    $(this).find('thead tr td').each(function(){
        if($(this).attr('data-bSortable') == 'true') {
            columnSort.push({ "bSortable": true });
        } else {
            columnSort.push({ "bSortable": false });
        }
    });
    $(this).dataTable({
        "sPaginationType": "full_numbers",
        "bFilter": bFilter,
        "fnDrawCallback": function( oSettings ) {
        },
        "aoColumns": columnSort
    });
});

3
Dovresti usare data-bSortableinvece di bSortable. bSortablenon è un attributo HTML valido.
James Donnelly,

A partire da DataTables 1.10.5 è ora possibile definire le opzioni di inizializzazione utilizzando gli attributi data- * HTML5. Vedi stackoverflow.com/a/32281113/1430996
Jeromy French

15

columnDefsora accetta un corso. Direi che questo è il metodo preferito se desideri specificare le colonne da disabilitare nel markup:

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th class="datatable-nosort">Actions</th>
        </tr>
    </thead>
    ...
</table>

Quindi, nel tuo JS:

$("table").DataTable({
    columnDefs: [{
        targets: "datatable-nosort",
        orderable: false
    }]
});

10

Ecco cosa puoi usare per disabilitare determinate colonne da disabilitare:

 $('#tableId').dataTable({           
            "columns": [
                { "data": "id"},
                { "data": "sampleSortableColumn" },
                { "data": "otherSortableColumn" },
                { "data": "unsortableColumn", "orderable": false}
           ]
});

Quindi tutto ciò che devi fare è aggiungere "ordinabile": false alla colonna che non vuoi essere ordinabile.


6
$("#example").dataTable(
  {
    "aoColumnDefs": [{
      "bSortable": false, 
      "aTargets": [0, 1, 2, 3, 4, 5]
    }]
  }
);

La risposta di Bhavesh è intelligente, ma eccessiva. Per disabilitare l'ordinamento basta usare la risposta di abhinav. Disabilitando l'ordinamento sulla prima colonna aggiungi un target colonna nell'opzione aoColumnDefs:"bSortable": false, "aTargets": [0]
Matthew

5

Per disabilitare l'ordinamento a colonna singola, prova questo esempio:

<script type="text/javascript">                         
    $(document).ready(function() 
    {
        $("#example").dataTable({
           "aoColumnDefs": [
              { 'bSortable': false, 'aTargets': [ 0 ] }
           ]
        });
    });                                         
</script>

Per più colonne, prova questo esempio: devi solo aggiungere il numero di colonna. Di default inizia da 0

<script type="text/javascript">                         
    $(document).ready(function() 
    {
        $("#example").dataTable({
           "aoColumnDefs": [
              { 'bSortable': false, 'aTargets': [ 0,1,2,4,5,6] }
           ]
        });
    });                                         
</script>  

Qui Column 3funziona solo


5

A partire da 1.10.5 , includi semplicemente

'ordinabile: falso'

in columnDefs e indirizza la tua colonna con

"obiettivi: [0,1]"

La tabella dovrebbe piacere come:

var table = $('#data-tables').DataTable({
    columnDefs: [{
        targets: [0],
        orderable: false
    }]
});

5

Se si imposta la orderableproprietà PRIMA colonna su false, è necessario impostare anche la ordercolonna predefinita , altrimenti non funzionerà poiché la prima colonna è la colonna di ordinamento predefinita. L'esempio seguente disabilita l'ordinamento sulla prima colonna ma imposta la seconda colonna come colonna dell'ordine predefinito (ricorda che gli indici di dataTables sono basati su zero).

$('#example').dataTable( {
  "order": [[1, 'asc']],
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );

Questa è la risposta che ha funzionato per me dal 17 luglio 2020
Brian


3

Per aggiornare la risposta di Bhavish (che penso sia per una versione precedente di DataTables e non ha funzionato per me). Penso che abbiano cambiato il nome dell'attributo. Prova questo:

<thead>
    <tr>
        <td data-sortable="false">Requirements</td>
        <td data-sortable="false">Automated</td>
        <td>Created On</td>
    </tr>
</thead>
<tbody>
    <tr>
        <td>

Questo sembra un buon approccio ... se ha funzionato, ma non per me. È documentato?
AllInOne

1
@AllInOne: sì, per data-orderable... vedi stackoverflow.com/a/32281113/1430996 . data-sortablefunziona anche, ma non riesco a trovare dove è documentato.
Jeromy French

soluzione molto migliore
Washington Morais,

2

Utilizzando la classe:

<table  class="table table-datatable table-bordered" id="tableID">
    <thead>
        <tr>
            <th class="nosort"><input type="checkbox" id="checkAllreInvitation" /></th>
            <th class="sort-alpha">Employee name</th>
            <th class="sort-alpha">Send Date</th>
            <th class="sort-alpha">Sender</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="userUid[]" value="{user.uid}" id="checkAllreInvitation" class="checkItemre validate[required]" /></td>
            <td>Alexander Schwartz</td>
            <td>27.12.2015</td>
            <td>dummy@email.com</td>
        </tr>
    </tbody>
</table>
<script type="text/javascript">
    $(document).ready(function() {
        $('#tableID').DataTable({
            'iDisplayLength':100,
            "aaSorting": [[ 0, "asc" ]],
            'aoColumnDefs': [{
                'bSortable': false,
                'aTargets': ['nosort']
            }]
        });
    });
</script>

Ora puoi dare la classe "nosort" a <TH>


2

Questo funziona per me per una singola colonna

 $('#example').dataTable( {
"aoColumns": [
{ "bSortable": false 
 }]});

1

Se devi già nascondere alcune colonne, come se nascondessi la colonna del cognome. Ho dovuto concatenare fname, lname, quindi ho fatto una query ma ho nascosto quella colonna dal front-end. Le modifiche in Disabilita ordinamento in tale situazione sono:

    "aoColumnDefs": [
        { 'bSortable': false, 'aTargets': [ 3 ] },
        {
            "targets": [ 4 ],
            "visible": false,
            "searchable": true
        }
    ],

Si noti che qui ho avuto la funzionalità di nascondere

    "columnDefs": [
            {
                "targets": [ 4 ],
                "visible": false,
                "searchable": true
            }
        ],

Poi l'ho unito "aoColumnDefs"


1
  1. Utilizzare il seguente codice per disabilitare l'ordinamento sulla prima colonna:

    $('#example').dataTable( {
      "columnDefs": [
        { "orderable": false, "targets": 0 }
      ]
    } );
  2. Per disabilitare l'ordinamento predefinito, puoi anche utilizzare:

    $('#example').dataTable( {
         "ordering": false, 
    } );

1

È possibile utilizzare direttamente il metodo .notsortable () sulla colonna

 vm.dtOpt_product = DTOptionsBuilder.newOptions()
                .withOption('responsive', true)
        vm.dtOpt_product.withPaginationType('full_numbers');
        vm.dtOpt_product.withColumnFilter({
            aoColumns: [{
                    type: 'null'
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'select',
                    bRegex: false,
                    bSmart: true,
                    values: vm.dtProductTypes
                }]

        });

        vm.dtColDefs_product = [
            DTColumnDefBuilder.newColumnDef(0), DTColumnDefBuilder.newColumnDef(1),
            DTColumnDefBuilder.newColumnDef(2), DTColumnDefBuilder.newColumnDef(3).withClass('none'),
            DTColumnDefBuilder.newColumnDef(4), DTColumnDefBuilder.newColumnDef(5).notSortable()
        ];

1

Esistono due modi, uno è definito in HTML quando si definiscono le intestazioni di tabella

<thead>
  <th data-orderable="false"></th>
</thead>

Un altro modo è usare javascript, ad esempio, hai una tabella

<table id="datatables">
    <thead>
        <tr>
            <th class="testid input">test id</th>
            <th class="testname input">test name</th>
    </thead>
</table>

poi,

$(document).ready(function() {
    $('#datatables').DataTable( {
        "columnDefs": [ {
            "targets": [ 0], // 0 indicates the first column you define in <thead>
            "searchable": false
        }
        , {
            // you can also use name to get the target column
            "targets": 'testid', // name is the class you define in <th>
            "searchable": false
        }
        ]
    }
    );
}
);

0

puoi anche usare un indice negativo come questo:

$('.datatable').dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
    "sPaginationType": "bootstrap",
    "aoColumnDefs": [
        { 'bSortable': false, 'aTargets': [ -1 ] }
    ]
});

0

Il codice sarà simile al seguente:

$(".data-cash").each(function (index) {
  $(this).dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
    "sPaginationType": "bootstrap",
    "oLanguage": {
      "sLengthMenu": "_MENU_ records per page",
      "oPaginate": {
        "sPrevious": "Prev",
        "sNext": "Next"
      }
    },
    "bSort": false,
    "aaSorting": []
  });
});

0

Ecco la risposta!

targets è il numero di colonna, inizia da 0

$('#example').dataTable( {
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );

-2

imposta la classe "no-sort" in th della tabella quindi aggiungi css .no-sort {pointer-events: none! important; cursore: impostazione predefinita! importante; immagine di sfondo: nessuna! importante; } con ciò nasconderà la freccia di aggiornamento e disabilitazione dell'evento nella testa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.