jQuery DataTablesの特定の列の並べ替えを無効にする


156

jQuery DataTablesプラグインを使用してテーブルフィールドをソートしています。私の質問は、特定の列の並べ替えを無効にするにはどうすればよいですか?次のコードを試してみましたが、機能しませんでした。

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

次のコードも試しました:

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

しかし、これでも望ましい結果は得られませんでした。


1
私は私の回答を編集し、TH定義で無効化列を設定できるオプションを使用しました。
パウロフィダルゴ2013年

CSSを使用してボタンを無効にします。このページをチェックしてください。 datatables.net/forums/discussion/21164/…–
Eugine Joseph、

回答:


176

これはあなたが探しているものです:

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

3
これは私のために働いた。最初の列をソートする場合は、「aTargets」:[-1]、2番目の「aTargets」:[1]、3番目の「aTargets」:[2]というようにします。
Lasang

5
あなたは単に 'aTargets'を実行できます:[1、2]
Adrien Be

2
@Lasang -あなたは本当にもしかして[-1]、それから[1][2]など?どういう-1意味ですか?列のインデックス付けは1dataTables から始まりませんか?
Dan Nissenbaum、2014

1
-1テーブルの最後から数えたインデックスです。(-1表の最後の列です)
Ramy Nasr 2014

1
DataTables 1.10.5以降、HTML5 data- *属性を使用して初期化オプションを定義できるようになりました。stackoverflow.com/a/32281113/1430996を
Jeromy French、

87

DataTables 1.10.5以降、HTML5 data- *属性を使用して初期化オプションを定義できるようになりました。

-DataTablesの -HTML5 data- *属性-テーブルオプション

したがってdata-orderable="false"thソート可能にしたくない列ので使用できます。たとえば、下の表の2番目の列「アバター」はソートできません。

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

https://jsfiddle.net/jhfrench/6yxvxt7L/で実際の例を参照してください


9
IMO、これがここでの最良の答えです。最も単純で最もエレガントなアプローチ
Hamman Samuel

2
これにより並べ替え機能が無効になりますが、(1.10.12では)DataTableが初期化されるときに列がデフォルトで引き続き並べ替えられ、列を昇順の並べ替えグリフでスタイル設定することがわかりました。これが必要ない場合は、次のようにソートせずにデータテーブルを初期化できます。$( '#example')。DataTable({'order':[]});
ブライアンメレル

@BrianMerrell Wellllllll ...見てください!jsfiddle.net/ja0ty8xr その動作については、GitHubの問題を開く必要があります。:)
Jeromyフランス語

64

最初の列の並べ替えを無効にするには、データテーブルjqueryで以下のコードを試してください。nullはここでの並べ替えの有効化を表します。

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

jQueryデータテーブルの列の並べ替えを無効にする


@Paulrajリンクが壊れています。変更してもよろしいですか?
taufique 2014年

1
DataTables 1.10.5以降、HTML5 data- *属性を使用して初期化オプションを定義できるようになりました。stackoverflow.com/a/32281113/1430996を
Jeromy French、

60

データテーブルの使用1.9.4次のコードを使用して、最初の列の並べ替えを無効にしました。

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

編集:

no-sortクラスを使用しても無効にできます<th>

次の初期化コードを使用します。

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

編集2

この例では、古いブログ投稿に従って、BootstrapでDatablesを使用しています。これで、ブートストラップによるDatatablesのスタイリングに関する更新された資料へのリンクが1つあります。


@larrylampco更新されたリンクで投稿を更新しました。
パウロフィダルゴ2014年

ありがとう..並べ替えを適用したときのcssの損失についてはどうでしょう
Shanker Paudel 14

1
DataTables 1.10.5以降、HTML5 data- *属性を使用して初期化オプションを定義できるようになりました。stackoverflow.com/a/32281113/1430996を参照
Jeromy French

27

私が使用しているのは、ad tdにカスタム属性を追加し、そのattr値を自動的にチェックしてソートを制御することです。

したがって、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>

そして、データテーブルを初期化するためのJavaScriptは(テーブル自体から動的にソート情報を取得します;)

$('.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
data-bSortable代わりに使用する必要がありますbSortablebSortableは有効なHTML属性ではありません。
James Donnelly 2013年

DataTables 1.10.5以降、HTML5 data- *属性を使用して初期化オプションを定義できるようになりました。stackoverflow.com/a/32281113/1430996を参照
Jeromy French

15

columnDefsクラスを受け入れます。マークアップで無効にする列を指定する場合は、これが推奨される方法です。

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

次に、JSで:

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

10

以下は、特定の列を無効にするために使用できるものです。

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

したがって、並べ替え可能にしたくない列に「orderable」:falseを追加するだけです。


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

Bhaveshの答えは賢いが、やり過ぎです。並べ替えを無効にするには、abhinavの回答を使用します。最初の列のソートを無効aoColumnDefsオプションで列のターゲットを追加します"bSortable": false, "aTargets": [0]
マシュー

5

単一列の並べ替えを無効にするには、次の例を試してください。

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

複数の列の場合、この例を試してください。列番号を追加するだけです。デフォルトでは0から始まります

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

ここでのみColumn 3機能します


5

以下のよう1.10.5、単に含めます

「注文可能:false」

columnDefsで、あなたの列をターゲットにして

'ターゲット:[0,1]'

テーブルは次のようにする必要があります:

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

5

FIRST column orderableプロパティをfalseに設定する場合は、デフォルトの列も設定する必要がありorderます。そうしないと、最初の列がデフォルトの順序付け列であるため機能しません。以下の例では、最初の列での並べ替えを無効にしますが、2番目の列をデフォルトの順序列として設定します(dataTablesのインデックスはゼロベースであることを忘れないでください)。

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

これは、2020年7月17日
ブライアン

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

ここでは0あなたが複数の列がソートされていないことにしたい場合は、列のインデックスは、によって区切ら言及列のインデックス値でありますcomma(,)


すべての列のソートを無効にすることは可能ですか?
fidel castro 2014

はいそれは可能、あなたが知っている、このリンクを訪問することができcbabhusal.wordpress.com/2015/08/18/...を
イリュージョニスト

3

Bhavishの回答を更新するには(これは古いバージョンのDataTablesに対するものであり、私にとってはうまくいきませんでした)。彼らは属性名を変更したと思います。これを試して:

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

これは良いアプローチのように見えます...それがうまくいったなら、私にはしません。文書化されていますか?
AllInOne 2016年

1
@AllInOne:はい、のためにdata-orderable参照してください... stackoverflow.com/a/32281113/1430996data-sortableまた動作しますが、それが記載されている場所を見つけることができません。
Jeromy French、

はるかに優れたソリューション
ワシントンモレ

2

クラスを使用:

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

<TH>に "nosort"クラスを与えることができます



1

姓の列を非表示にするように、いくつかの列を既に非表示にする必要がある場合。fname、lnameを連結する必要があるだけなので、クエリを作成しましたが、その列をフロントエンドから非表示にしました。このような状況でのソートの無効化の変更は次のとおりです。

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

ここに非表示機能があったことに注意してください

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

次に、それを "aoColumnDefs"


1
  1. 次のコードを使用して、最初の列の順序を無効にします。

    $('#example').dataTable( {
      "columnDefs": [
        { "orderable": false, "targets": 0 }
      ]
    } );
  2. デフォルトの順序付けを無効にするには、次のものも使用できます。

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

1

列で.notsortable()メソッドを直接使用できます

 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

2つの方法があります。1つは、テーブルヘッダーを定義するときにhtmlで定義されます。

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

別の方法は、JavaScriptを使用することです。たとえば、テーブルがあります。

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

その後、

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

次のような負のインデックスを使用することもできます。

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

コードは次のようになります。

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

ここに答えがあります!

targets 列番号で、0から始まります

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

-2

テーブルの "class-no-sort"を設定し、css .no-sort {pointer-events:none!important;を追加します。カーソル:デフォルト!重要;背景画像:なし!重要; これにより、上向き矢印と非表示イベントを頭に隠します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.