前提・実現したいこと
jQueryのプラグインであるDataTablesで表を作成しています。
表の特定の列が特定の値の時、表示内容を変更しつつもソートは元の値で行いたいと考えております。
下記例では以下を表現しております。
- 当該列のデータが2の時、表示は「弐」でソートは「2」で行いたい
発生している問題・エラーメッセージ
元の値でソートすることができません。
下記例であれば、「1」「弐」「3」「4」でソートが行われてしまいます。
該当のソースコード
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>sample</title> 8 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> 9 <link rel="stylesheet" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css"> 10</head> 11<body> 12 <button id="add_data">add data</button> 13 <table id="table_id" class="display"> 14 <thead> 15 <tr> 16 <th>Column 1</th> 17 </tr> 18 </thead> 19 <tbody> 20 </tbody> 21 </table> 22 23 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> 24 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> 25 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> 26 <script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script> 27 <!-- 下記Javascript --> 28 <script src="./table.js"></script> 29</body> 30</html>
javascript
1/* table.js */ 2$(document).ready( function () { 3 variants_table = $('#table_id').DataTable({ 4 columns: [ 5 { 6 "data": "some_no", 7 "render":function ( data, type, full, meta ) { 8 // dataが特定の値のときに表示形式を変更する処理 9 if(data == 2){ 10 return "弐" 11 } 12 return data; 13 }, 14 "createdCell": function (td, cellData, rowData, row, col) { 15 // 並び順を設定 16 $(td).attr("data-order", rowData["some_no"]); 17 $(td).attr("data-sort", rowData["some_no"]); 18 } 19 } 20 ] 21 }); 22 variants_table.draw() 23 24 // Ajaxで取得したデータを想定 25 addData = [ 26 {"some_no":1}, 27 {"some_no":2}, 28 {"some_no":3}, 29 {"some_no":4}, 30 ] 31 32 // 画面上部のボタン押下でデータを追加し再描画(Ajaxで取得したデータの挿入と再描画を想定) 33 $("#add_data").click(function(){ 34 var dt = $('#table_id').DataTable() 35 dt.clear() 36 $('#table_id').dataTable().fnAddData(addData) 37 dt.order([[ 0, "asc" ]]) 38 dt.draw() 39 }) 40} );
試したこと
createdCellでtdに以下を付与しましたが、並び順は変更できませんでした。
- data-order
- data-sort
また、元の値でソートしたのちセルが生成されることを期待し、renderのみにしてみましたが、renderで変更された内容でソートされるような挙動をしております。
補足情報(FW/ツールのバージョンなど)
- jQuert 3.1.5
- Datatables 1.10.25
あなたの回答
tips
プレビュー