Desativar classificação para uma coluna específica no jQuery DataTables

156

Estou usando o plugin jQuery DataTables para classificar os campos da tabela. Minha pergunta é: como desabilito a classificação para uma coluna específica? Eu tentei com o seguinte código, mas não funcionou:

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

Eu também tentei o seguinte código:

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

mas isso ainda não produziu os resultados desejados.

usman
fonte
1
Editei minha resposta, com uma opção em que você pode definir as colunas de desativação na sua definição de TH.
Paulo Fidalgo
Desativar botão usando css. confira esta página. datatables.net/forums/discussion/21164/…
Eugine Joseph
você também pode querer procurar cbabhusal.wordpress.com/2015/05/20/…
illusionist

Respostas:

176

Isto é o que você está procurando:

$('#example').dataTable( {
      "aoColumnDefs": [
          { 'bSortable': false, 'aTargets': [ 1 ] }
       ]
});
wildehahn
fonte
3
isso funcionou para mim. Se você deseja classificar a primeira coluna, 'aTargets': [-1], para o segundo 'aTargets': [1], para o terceiro 'aTargets': [2] e assim por diante.
Lasang
5
você pode simplesmente fazer 'aTargets': [1, 2]
Adrien Seja
2
@Lasang - Será que você realmente quer dizer [-1], então [1], [2], etc? O que -1significa isso? A indexação de colunas não começa em 1dataTables?
Dan Nissenbaum 13/02/2014
1
-1é o índice contado no final da tabela. ( -1é a última coluna da tabela)
Ramy Nasr 27/06
1
A partir do DataTables 1.10.5, agora é possível definir opções de inicialização usando os atributos data5 * do HTML5. Veja stackoverflow.com/a/32281113/1430996
Jeromy French
87

A partir do DataTables 1.10.5, agora é possível definir opções de inicialização usando os atributos data5 * do HTML5.

-de DataTables exemplo - dados HTML5- * atributos - opções de tabela

Então você pode usar data-orderable="false"na thcoluna que não deseja classificar. Por exemplo, a segunda coluna "Avatar" na tabela abaixo não pode ser classificada:

<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>

Veja um exemplo de trabalho em https://jsfiddle.net/jhfrench/6yxvxt7L/ .

Jeromy French
fonte
9
IMO, esta é a melhor resposta aqui, a abordagem mais simples e elegante
Hamman Samuel
2
Isso desativa a funcionalidade de classificação, mas descobri (em 1.10.12) que a coluna ainda é classificada por padrão quando o DataTable é inicializado, o que estiliza a coluna com um glifo de classificação crescente. Se você não quiser isso, poderá inicializar a tabela de dados sem classificar da seguinte forma: $ ('# example'). DataTable ({'order': []});
Brian Merrell
@BrianMerrell Wellllllll ... olha isso! jsfiddle.net/ja0ty8xr Você deve abrir um problema do GitHub para esse comportamento. :)
Jeromy French
64

Para desativar a classificação da primeira coluna, tente com o código abaixo no jquery da tabela de dados. O nulo representa a classificação habilitada aqui.

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

Desabilitar a classificação em uma coluna no jQuery Datatables

Paulraj
fonte
@Paulraj O link está quebrado, você se importaria de mudar?
taufique
1
A partir do DataTables 1.10.5, agora é possível definir opções de inicialização usando os atributos data5 * do HTML5. Veja stackoverflow.com/a/32281113/1430996
Jeromy French
60

Usando o Datatables 1.9.4, desativei a classificação para a primeira coluna com este código:

/* 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 ]
        } ]
    });
});

EDITAR:

Você pode desativar mesmo usando a no-sortclasse no seu <th>,

e use este código de inicialização:

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

EDIT 2

Neste exemplo, estou usando o Datables com Bootstrap, seguindo uma antiga postagem no blog. Agora, há um link com material atualizado sobre o estilo de tabelas de dados com bootstrap .

Paulo Fidalgo
fonte
@larrylampco Atualizei a postagem com links atualizados.
Paulo Fidalgo
Thanks .. o que acontece com a perda de css quando aplicamos a classificação
Shanker Paudel
1
A partir do DataTables 1.10.5, agora é possível definir opções de inicialização usando os atributos data5 * do HTML5. Veja stackoverflow.com/a/32281113/1430996
Jeromy French
27

O que eu uso é apenas adicionar um atributo personalizado no thd td e controlar a classificação, verificando esse valor automaticamente.

Portanto, o código HTML será

<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 o JavaScript para inicializar as tabelas de dados será (ele obterá dinamicamente as informações de classificação da própria tabela;)

$('.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
    });
});
Bhavesh B
fonte
3
Você deve usar em data-bSortablevez de bSortable. bSortablenão é um atributo HTML válido.
James Donnelly
A partir do DataTables 1.10.5, agora é possível definir opções de inicialização usando os atributos data5 * do HTML5. Veja stackoverflow.com/a/32281113/1430996
Jeromy French
15

columnDefsagora aceita uma classe. Eu diria que esse é o método preferido se você desejar especificar colunas para desativar na sua marcação:

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

Então, no seu JS:

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

Aqui está o que você pode usar para desativar determinada coluna a ser desativada:

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

Então, tudo o que você precisa fazer é adicionar o "ordenável": false à coluna que você não deseja classificar.

Constantin Stan
fonte
6
$("#example").dataTable(
  {
    "aoColumnDefs": [{
      "bSortable": false, 
      "aTargets": [0, 1, 2, 3, 4, 5]
    }]
  }
);
abhinav
fonte
A resposta de Bhavesh é inteligente, mas exagerada. Para desativar a classificação, basta usar a resposta de abhinav. Desativar a classificação na primeira coluna, adicione um destino de coluna na opção aoColumnDefs:"bSortable": false, "aTargets": [0]
Matthew
5

Para desabilitar a classificação de coluna única, tente este exemplo:

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

Para Várias colunas, tente este exemplo: você só precisa adicionar o número da coluna. Por padrão, está começando de 0

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

Aqui só Column 3funciona

Siddhartha esunuri
fonte
5

A partir de 1.10.5 , basta incluir

'ordenável: falso'

em columnDefs e segmente sua coluna com

«Objetivos: [0,1]»

A tabela deve gostar:

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

Se você definir a orderablepropriedade da coluna PRIMEIRO como false, também deverá definir a ordercoluna padrão , caso contrário ela não funcionará, pois a primeira coluna é a coluna de pedidos padrão. O exemplo abaixo desabilita a classificação na primeira coluna, mas define a segunda coluna como coluna de ordem padrão (lembre-se de que os índices do dataTables são baseados em zero).

$('#example').dataTable( {
  "order": [[1, 'asc']],
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );
Moses Machua
fonte
Esta é a resposta que funcionou para mim em 17 de julho de 2020
Brian
3
"aoColumnDefs" : [   
{
  'bSortable' : false,  
  'aTargets' : [ 0 ]
}]

Aqui 0está o índice da coluna. Se você deseja que várias colunas não sejam classificadas, mencione os valores do índice da coluna separados porcomma(,)

codificador
fonte
é possível desativar a classificação para todas as colunas?
fidel castro
Sim, é possível, você pode visitar este link para conhecer cbabhusal.wordpress.com/2015/08/18/…
illusionist
3

Para atualizar a resposta de Bhavish (que eu acho que é para uma versão mais antiga do DataTables e não funcionou para mim). Eu acho que eles mudaram o nome do atributo. Tente o seguinte:

<thead>
    <tr>
        <td data-sortable="false">Requirements</td>
        <td data-sortable="false">Automated</td>
        <td>Created On</td>
    </tr>
</thead>
<tbody>
    <tr>
        <td>
Josh Mouch
fonte
Parece uma boa abordagem ... se funcionou, mas não funciona para mim. Está documentado?
AllInOne 7/03/16
1
@AllInOne: sim, para data-orderable... consulte stackoverflow.com/a/32281113/1430996 . data-sortabletambém funciona, mas não consigo encontrar onde está documentado.
Jeromy French
muito melhor solução
Washington Morais
2

Usando 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>

Agora você pode dar a classe "nosort" para <TH>

Ghanshyam Gohel
fonte
2

Isso funciona para mim para uma única coluna

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

Se você já precisa ocultar Algumas colunas, como eu oculto a coluna sobrenome. Eu apenas tive que concatenar fname, lname, então fiz a consulta, mas ocultei a coluna do front end. As modificações em Desativar classificação nessa situação são:

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

Observe que eu tinha a funcionalidade Ocultando aqui

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

Então eu a fundei "aoColumnDefs"

Pratik
fonte
1
  1. Use o código a seguir para desativar o pedido na primeira coluna:

    $('#example').dataTable( {
      "columnDefs": [
        { "orderable": false, "targets": 0 }
      ]
    } );
  2. Para desativar a ordem padrão, você também pode usar:

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

Você pode usar o método .notsortable () diretamente na coluna

 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()
        ];
Urvi_204
fonte
1

Existem duas maneiras, uma é definida em html quando você define cabeçalhos de tabela

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

Outra maneira é usar javascript, por exemplo, você tem tabela

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

então,

$(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
        }
        ]
    }
    );
}
);
Zero
fonte
0

você também pode usar um índice negativo como este:

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

O código ficará assim:

$(".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": []
  });
});
Pitão
fonte
0

Aqui está a resposta!

targets é o número da coluna, começa em 0

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

defina a classe "no-sort" na tabela e adicione css .no-sort {eventos-ponteiro: nenhum! importante; cursor: padrão! importante; imagem de fundo: nenhuma! importante; } com isso, oculta a seta atualizada e desativa o evento na cabeça.

Rahul
fonte