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.

usman
źródło
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
możesz też zajrzeć na cbabhusal.wordpress.com/2015/05/20/…
iluzjonista

Odpowiedzi:

176

Oto, czego szukasz:

$('#example').dataTable( {
      "aoColumnDefs": [
          { 'bSortable': false, 'aTargets': [ 1 ] }
       ]
});
Wildehahn
źródło
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/ .

Jeromy French
źródło
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
źródło
@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 .

Paulo Fidalgo
źródło
@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
    });
});
Bhavesh B
źródło
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
    }]
});
dtbarne
źródło
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ć.

Constantin Stan
źródło
6
$("#example").dataTable(
  {
    "aoColumnDefs": [{
      "bSortable": false, 
      "aTargets": [0, 1, 2, 3, 4, 5]
    }]
  }
);
abhinav
źródło
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

Siddhartha esunuri
źródło
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
    }]
});
Marko Bajlovic
źródło
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 }
  ]
} );
Mojżesz Machua
źródło
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(,)

koder
źródło
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>
Josh Mouch
źródło
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”

Ghanshyam Gohel
źródło
2

To działa dla mnie dla jednej kolumny

 $('#example').dataTable( {
"aoColumns": [
{ "bSortable": false 
 }]});
Amay Kulkarni
źródło
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"

Pratik
źródło
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, 
    } );
Pushkaraj Bhandari
źródło
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()
        ];
Urvi_204
źródło
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
        }
        ]
    }
    );
}
);
Zero
źródło
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 ] }
    ]
});
Nurul Ferdous
źródło
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": []
  });
});
Pyton
źródło
0

Oto odpowiedź!

targets to numer kolumny, zaczyna się od 0

$('#example').dataTable( {
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );
BumbuKhan
źródło
-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.

Rahul
źródło