DataTables: Custom priority sorting
by Dominic Myers
HTML
<link rel="stylesheet" href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<table id="example" class="display" style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Priority</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>High</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Medium</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>Low</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior Javascript Developer</td>
<td>Unprioritized</td>
</tr>
<tr>
<td>Airi Satou</td>
<td>Accountant</td>
<td>N/A</td>
</tr>
<tr>
<td>Brielle Williamson</td>
<td>Integration Specialist</td>
<td>High</td>
</tr>
<tr>
<td>Herrod Chandler</td>
<td>Sales Assistant</td>
<td>N/A</td>
</tr>
</tbody>
</table>
JavaScript
var example = $('#example').DataTable({
columns: [
null,
null,
{
sType : "priority",
render: function(data,type,row) {
var retVal = $("<div/>");
switch(data) {
case "High":
retVal = retVal
.addClass("my-class-"+data.toLowerCase())
.attr("data-priority", data.toLowerCase())
.text(data);
break;
case "Medium":
retVal = retVal
.addClass("my-class-"+data.toLowerCase())
.attr("data-priority", data.toLowerCase())
.text(data)
break;
case "Low":
retVal = retVal
.addClass("my-class-"+data.toLowerCase())
.attr("data-priority", data.toLowerCase())
.text(data)
break;
case "Unprioritized":
retVal = retVal
.addClass("my-class-"+data.toLowerCase())
.attr("data-priority", data.toLowerCase())
.text(data)
break;
case "N/A":
retVal = retVal
.addClass("my-class-notapplicable")
.attr("data-priority", "notapplicable")
.text(data)
break;
}
return retVal.prop("outerHTML");
}
}
]
});
function getRank(data) {
switch (data) {
case "high":
return 0;
case "medium":
return 1;
case "low":
return 2;
case "unprioritized":
return 3;
case "notapplicable":
return 4;
default:
throw "Unrecognized priority.";
}
}
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"priority-pre": function ( a ) {
return getRank($(a).data("priority"));
},
"priority-asc": function( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"priority-desc": function(a,b) {
return ((a < b) ? 1...