Wyłącz sortowanie dla określonej kolumny w jQuery DataTables


156

Używam wtyczki jQuery DataTables do sortowania pól tabeli. Moje pytanie brzmi: jak wyłączyć sortowanie dla określonej kolumny? Próbowałem z następującym kodem, ale nie działa:

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

Wypróbowałem również następujący kod:

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

ale to nadal nie przyniosło pożądanych rezultatów.


1
Edytowałem moją odpowiedź z opcją, w której możesz ustawić kolumny wyłączania w definicji TH.
Paulo Fidalgo

Wyłącz przycisk za pomocą CSS. sprawdź tę stronę. datatables.net/forums/discussion/21164/…
Eugine Joseph

Odpowiedzi:


176

Oto, czego szukasz:

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

3
to działało dla mnie. Jeśli chcesz posortować pierwszą kolumnę, „aTargets”: [-1], dla drugiej „aTargets”: [1], dla trzeciej „aTargets”: [2] i tak dalej.
Lasang

5
możesz po prostu zrobić „aTargets”: [1, 2]
Adrien Be

2
@Lasang - Czy naprawdę myśli [-1], a potem [1], [2]itp? Co to -1oznacza? Czy indeksowanie kolumn nie rozpoczyna się w 1przypadku dataTables?
Dan Nissenbaum

1
-1to indeks liczący od końca tabeli. ( -1to ostatnia kolumna tabeli)
Ramy Nasr

1
Począwszy od DataTables 1.10.5 można teraz definiować opcje inicjalizacji przy użyciu atrybutów HTML5 data- *. Zobacz stackoverflow.com/a/32281113/1430996
Jeromy French

87

Począwszy od DataTables 1.10.5 można teraz definiować opcje inicjalizacji przy użyciu atrybutów HTML5 data- *.

-z przykładu DataTables - dane HTML5- * atrybuty - opcje tabeli

Możesz więc użyć data-orderable="false"w thkolumnie, której nie chcesz sortować. Na przykład nie będzie można sortować drugiej kolumny „Awatar” w poniższej tabeli:

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

Zobacz działający przykład pod adresem https://jsfiddle.net/jhfrench/6yxvxt7L/ .


9
IMO, to najlepsza odpowiedź tutaj, najprostsze i najbardziej eleganckie podejście
Hamman Samuel

2
Spowoduje to wyłączenie funkcji sortowania, ale stwierdziłem (w wersji 1.10.12), że kolumna jest nadal domyślnie sortowana po zainicjowaniu DataTable, co powoduje stylizację kolumny za pomocą glifu sortowania rosnącego. Jeśli tego nie chcesz, możesz zainicjować datatable bez sortowania w ten sposób: $ ('# example'). DataTable ({'order': []});
Brian Merrell

@BrianMerrell Wellllllll ... spójrz na to! jsfiddle.net/ja0ty8xr Powinieneś otworzyć zgłoszenie GitHub dla tego zachowania. :)
Jeromy French

64

Aby wyłączyć sortowanie pierwszej kolumny, spróbuj użyć poniższego kodu w pliku danych jquery. Wartość null reprezentuje włączenie sortowania w tym miejscu.

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

Wyłącz sortowanie według kolumny w jQuery Datatables


@Paulraj Link jest uszkodzony, czy możesz go zmienić?
taufique

1
Począwszy od DataTables 1.10.5 można teraz definiować opcje inicjalizacji przy użyciu atrybutów HTML5 data- *. Zobacz stackoverflow.com/a/32281113/1430996
Jeromy French

60

Używając Datatables 1.9.4, wyłączyłem sortowanie dla pierwszej kolumny za pomocą tego kodu:

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

EDYTOWAĆ:

Możesz wyłączyć, nawet używając no-sortklasy na swoim <th>,

i użyj tego kodu inicjalizacji:

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

EDYCJA 2

W tym przykładzie używam Datables z Bootstrap, po starym wpisie na blogu. Teraz jest jeden link ze zaktualizowanym materiałem na temat stylizacji Datatables za pomocą bootstrap .


@larrylampco Zaktualizowałem post o zaktualizowane linki.
Paulo Fidalgo

Dzięki… a co z utratą css po zastosowaniu sortowania
Shanker Paudel

1
Począwszy od DataTables 1.10.5 można teraz definiować opcje inicjalizacji przy użyciu atrybutów HTML5 data- *. Zobacz stackoverflow.com/a/32281113/1430996
Jeromy French

27

Używam po prostu dodania niestandardowego atrybutu w thead td i kontrolowania sortowania, sprawdzając automatycznie tę wartość attr.

Więc kod HTML będzie

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

A JavaScript do inicjalizacji zbiorów danych będzie (sam dynamicznie pobierze informacje o sortowaniu z tabeli;)

$('.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
Powinieneś użyć data-bSortablezamiast bSortable. bSortablenie jest prawidłowym atrybutem HTML.
James Donnelly

Począwszy od DataTables 1.10.5 można teraz definiować opcje inicjalizacji przy użyciu atrybutów HTML5 data- *. Zobacz stackoverflow.com/a/32281113/1430996
Jeromy French

15

columnDefsteraz przyjmuje zajęcia. Powiedziałbym, że jest to preferowana metoda, jeśli chcesz określić kolumny do wyłączenia w znacznikach:

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

Następnie w swoim JS:

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

10

Oto, czego możesz użyć, aby wyłączyć określoną kolumnę:

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

Więc wszystko, co musisz zrobić, to dodać „orderable”: false do kolumny, której nie chcesz sortować.


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

Odpowiedź Bhavesha jest sprytna, ale przesada. Aby wyłączyć sortowanie, po prostu użyj odpowiedzi abhinav. Wyłączenie sortowania w pierwszej kolumnie powoduje dodanie celu kolumny w opcji aoColumnDefs:"bSortable": false, "aTargets": [0]
Matthew

5

W przypadku sortowania w jednej kolumnie wyłącz, wypróbuj ten przykład:

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

W przypadku wielu kolumn wypróbuj ten przykład: wystarczy dodać numer kolumny. Domyślnie zaczyna się od 0

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

Tutaj tylko Column 3działa


5

Od 1.10.5 po prostu dołącz

„orderable: false”

w columnDefs i kieruj swoją kolumnę z

„cele: [0,1]”

Stolik powinien polubić:

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

5

Jeśli ustawisz właściwość FIRST kolumny orderablena false, musisz również ustawić domyślną orderkolumnę, w przeciwnym razie nie zadziała, ponieważ pierwsza kolumna jest domyślną kolumną porządkową. Poniższy przykład wyłącza sortowanie w pierwszej kolumnie, ale ustawia drugą kolumnę jako domyślną kolumnę kolejności (pamiętaj, że indeksy dataTables są liczone od zera).

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

To jest odpowiedź, która działała dla mnie od 17 lipca 2020 r.
Brian

3
"aoColumnDefs" : [   
{
  'bSortable' : false,  
  'aTargets' : [ 0 ]
}]

Oto 0indeks kolumny, jeśli chcesz, aby wiele kolumn nie było sortowanych, podaj wartości indeksu kolumn oddzielonecomma(,)


czy można wyłączyć sortowanie dla wszystkich kolumn?
fidel castro

Tak, to możliwe, możesz odwiedzić ten link, aby dowiedzieć się cbabhusal.wordpress.com/2015/08/18/ ...
iluzjonista

3

Aby zaktualizować odpowiedź Bhavisha (która, jak sądzę, dotyczy starszej wersji DataTables i nie działa dla mnie). Myślę, że zmienili nazwę atrybutu. Spróbuj tego:

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

Wydaje się, że to miłe podejście ... jeśli zadziałało, ale nie dla mnie. Czy to jest udokumentowane?
AllInOne

1
@AllInOne: tak, aby data-orderable... patrz stackoverflow.com/a/32281113/1430996 . data-sortablerównież działa, ale nie mogę znaleźć, gdzie jest to udokumentowane.
Jeromy French

znacznie lepsze rozwiązanie
Washington Morais

2

Korzystanie z klasy:

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

Teraz możesz nadać <TH> klasę „nosort”


2

To działa dla mnie dla jednej kolumny

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

1

Jeśli już musisz ukryć Niektóre kolumny, na przykład ukrywam kolumnę z nazwiskiem. Musiałem tylko połączyć fname, lname, więc wykonałem zapytanie, ale ukryłem tę kolumnę z przodu. Modyfikacje w opcji Wyłącz sortowanie w takiej sytuacji to:

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

Zauważ, że mam tutaj funkcję ukrywania

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

Następnie połączyłem to w "aoColumnDefs"


1
  1. Użyj poniższego kodu, aby wyłączyć porządkowanie w pierwszej kolumnie:

    $('#example').dataTable( {
      "columnDefs": [
        { "orderable": false, "targets": 0 }
      ]
    } );
  2. Aby wyłączyć domyślne porządkowanie, możesz również użyć:

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

1

Możesz bezpośrednio użyć metody .notsortable () na kolumnie

 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

Istnieją dwa sposoby, jeden jest definiowany w html podczas definiowania nagłówków tabeli

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

Innym sposobem jest użycie javascript, na przykład masz tabelę

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

następnie,

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

możesz również użyć indeksu ujemnego w następujący sposób:

$('.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

Kod będzie wyglądał następująco:

$(".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

Oto odpowiedź!

targets to numer kolumny, zaczyna się od 0

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

-2

ustaw klasę "no-sort" w tabeli, a następnie dodaj css .no-sort {pointer-events: none! kursor: domyślny! ważny; obraz-tła: brak! ważny; } przez to ukryje strzałkę updown i wyłączy zdarzenie w głowie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.