1

给定以下代码:

var aDataSet = [
    ['1', 'Trident','Internet Explorer 4.0','Win 95+','4','X'],
    ['2', 'Fish','Internet Explorer 5.0','Win 95+','5','C'],
    ['3', 'Pony','Internet Explorer 5.5','Win 95+','5.5','A']
];

$('#example').dataTable( {
    "aaData": aDataSet,
    "aoColumns": [
        { "sTitle": "Engine" },
        { "sTitle": "Browser" },
        { "sTitle": "Platform" },
        { "sTitle": "Version", "sClass": "customCSS-" +aDataSet['id']['Version']  }, 
        { "sTitle": "Grade", "sClass": "center" }
    ]
} );    

我希望能够查找当前正在处理的aDataSet元素并取回其Version信息,以便我可以在aoColumns样式的上下文中进行字符串连接。以上不执行任何样式。本次修改:

    { "sTitle": "Version", "sClass": "customCSS-" +aDataSet[0]['Version']  }

使所有内容都与第零个索引匹配(显然),但我希望我可以以某种方式强制进行查找。任何见解都值得赞赏。

4

1 回答 1

3

好吧,老实说,我不认为你担心Version它本身的价值,因为那只是数据表标准的虚拟数据,所以我冒昧地不使用它作为css类名连接的一部分。该Version值包含点,这些点会使 CSS 变得一团糟。然后牢记这一点,并假设我了解您要执行的操作,这是完成任务的一种方法,如 jsbin 所示:

http://jsbin.com/onelev/2/edit

这里的要点是使用fnRowCallback在表格单元格上生成动态类名。

用于自定义单元格颜色样式的 CSS

.customCSS-Trident, table.dataTable tr.even td.customCSS-Trident.sorting_1, table.dataTable tr.odd td.customCSS-Trident.sorting_1 { background-color: blue; color: #fff; }
.customCSS-Fish, table.dataTable tr.even td.customCSS-Fish.sorting_1, table.dataTable tr.odd td.customCSS-Fish.sorting_1 { background-color: green; color: #fff; }
.customCSS-Pony, table.dataTable tr.even td.customCSS-Pony.sorting_1, table.dataTable tr.odd td.customCSS-Pony.sorting_1 { background-color: brown; color: yellow; }
.customCSS-Cabbage, table.dataTable tr.even td.customCSS-Cabbage.sorting_1, table.dataTable tr.odd td.customCSS-Cabbage.sorting_1 { background-color: pink; }

JavaScript

   $(document).ready( function() {
     var oTable = $('#example').dataTable( {
       "aaData": aDataSet,
       "aoColumnDefs": [ 
         {  "aTargets": [ 0 ], 
            "sTitle": "#" 
         },
         {  "aTargets": [ 1 ], 
            "sTitle": "Engine" 
         },
        { "aTargets": [ 2 ], 
           "sTitle": "Browser" 
        },
        { "aTargets": [ 3 ], 
         "sTitle": "Platform" 
        },
         { "aTargets": [ 4 ],
          "sTitle": "Version"
        },      
        { "aTargets": [ 5 ], 
          "sTitle": "Grade", 
          "sClass": "center" 
         }
       ], 
        "fnRowCallback": function( nRow, aData, iDisplayIndex ) {
          $('td:eq(4)', nRow).addClass("customCSS-" + aData[1]);    
            return nRow;
        },
     });
   } );

HTML

      <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
        <thead>
          <tr>
            <th>#</th>
            <th>Engine</th>
            <th>Browser</th>
            <th>Platform(s)</th>
            <th>Engine version</th>
            <th>CSS grade</th>
          </tr>
        </thead>
        <tbody>
       </tbody>
  </table>

当您对某一特定列进行排序时,附录
DataTables 会动态生成该类。sorting_1如果您有老练的用户按住 shift 键然后单击另一个列标题,那么 datatables 会生成另一个名为 的类sorting_2,依此类推。虽然让用户按多列排序的机会可能非常低,但可以通过css为这些额外案例添加额外规则来处理这些案例。

于 2013-06-13T04:44:35.820 回答