Is there any way to display the sorting icons of datatable next to the header text like above image ?
Asked
Active
Viewed 4,192 times
3
-
Yes, `datatables` already does it, check out: https://datatables.net/examples/basic_init/table_sorting.html. If you have any doubts, this question can help you out: http://stackoverflow.com/questions/8286508/jquery-datatable-doesnt-show-sort-icon – Ricardo Pontual Dec 29 '16 at 16:40
-
@RicardoPontual, that's not what OP meant, he meant whether it's possible to display icon *right after* header text. – Gyrocode.com Dec 29 '16 at 16:44
-
Sorting works fine , i just want to place the icon next to the header text like above image , like this
Request Name .. – Britman Dec 29 '16 at 16:52 -
I understood what you want to do – Ricardo Pontual Dec 29 '16 at 17:01
2 Answers
5
One possibility is to listen for draw.dt event.
Every time the datatable is drawn you may reposition the background-position-x (the icon) according to the width of the corresponding column title:
// the following extension comes from http://stackoverflow.com/questions/1582534/calculating-text-width
$.fn.textWidth = function(){
var html_org = $(this).html();
var html_calc = '<span>' + html_org + '</span>';
$(this).html(html_calc);
var width = $(this).find('span:first').width();
$(this).html(html_org);
return width;
};
$('#example').on( 'draw.dt', function (e) {
$('#example thead tr th').each(function(idx, ele) {
var xPos = parseInt((($(ele).width() + $(ele).textWidth()) / 2) + 20);
$(ele).css('background-position-x', xPos + 'px')
})
});
$('#example').DataTable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
<script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior Javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012/03/29</td>
<td>$433,060</td>
</tr>
<tr>
<td>Airi Satou</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>33</td>
<td>2008/11/28</td>
<td>$162,700</td>
</tr>
<tr>
<td>Brielle Williamson</td>
<td>Integration Specialist</td>
<td>New York</td>
<td>61</td>
<td>2012/12/02</td>
<td>$372,000</td>
</tr>
<tr>
<td>Herrod Chandler</td>
<td>Sales Assistant</td>
<td>San Francisco</td>
<td>59</td>
<td>2012/08/06</td>
<td>$137,500</td>
</tr>
<tr>
<td>Rhona Davidson</td>
<td>Integration Specialist</td>
<td>Tokyo</td>
<td>55</td>
<td>2010/10/14</td>
<td>$327,900</td>
</tr>
<tr>
<td>Colleen Hurst</td>
<td>Javascript Developer</td>
<td>San Francisco</td>
<td>39</td>
<td>2009/09/15</td>
<td>$205,500</td>
</tr>
<tr>
<td>Sonya Frost</td>
<td>Software Engineer</td>
<td>Edinburgh</td>
<td>23</td>
<td>2008/12/13</td>
<td>$103,600</td>
</tr>
<tr>
<td>Jena Gaines</td>
<td>Office Manager</td>
<td>London</td>
<td>30</td>
<td>2008/12/19</td>
<td>$90,560</td>
</tr>
<tr>
<td>Quinn Flynn</td>
<td>Support Lead</td>
<td>Edinburgh</td>
<td>22</td>
<td>2013/03/03</td>
<td>$342,000</td>
</tr>
<tr>
<td>Charde Marshall</td>
<td>Regional Director</td>
<td>San Francisco</td>
<td>36</td>
<td>2008/10/16</td>
<td>$470,600</td>
</tr>
<tr>
<td>Haley Kennedy</td>
<td>Senior Marketing Designer</td>
<td>London</td>
<td>43</td>
<td>2012/12/18</td>
<td>$313,500</td>
</tr>
<tr>
<td>Tatyana Fitzpatrick</td>
<td>Regional Director</td>
<td>London</td>
<td>19</td>
<td>2010/03/17</td>
<td>$385,750</td>
</tr>
<tr>
<td>Michael Silva</td>
<td>Marketing Designer</td>
<td>London</td>
<td>66</td>
<td>2012/11/27</td>
<td>$198,500</td>
</tr>
<tr>
<td>Paul Byrd</td>
<td>Chief Financial Officer (CFO)</td>
<td>New York</td>
<td>64</td>
<td>2010/06/09</td>
<td>$725,000</td>
</tr>
<tr>
<td>Gloria Little</td>
<td>Systems Administrator</td>
<td>New York</td>
<td>59</td>
<td>2009/04/10</td>
<td>$237,500</td>
</tr>
<tr>
<td>Bradley Greer</td>
<td>Software Engineer</td>
<td>London</td>
<td>41</td>
<td>2012/10/13</td>
<td>$132,000</td>
</tr>
</tbody>
</table>

gaetanoM
- 41,594
- 6
- 42
- 61
-
wow ! this is great .. but only problem i am seeing here is during browser shrink and expand its collapsing .. is there any way to handle this ? – Britman Jan 03 '17 at 04:26
-
1Excellent. And for left aligned header text use `var xPos = $(ele).textWidth() + 5;` – VDWWD Sep 09 '17 at 12:07
0
The way datatables
use the sort images you can change to any image you want, you just need to set background-image
in these classes:
table.dataTable thead .sorting {
background-image: /* your image goes here */
}
table.dataTable thead .sorting_asc {
background-image: /* your image goes here */
}
table.dataTable thead .sorting_desc {
background-image: /* your image goes here */
}
To put it aligned with the column text it's complicated, since the image is put as background of the th
tag. You need to change the datatables
code, to generate the text and image as two elements side-by-side, like a span
and a div
, for instance. But you can align the image left to the text, adding background-position: center left;
to the classes above.

Ricardo Pontual
- 3,749
- 3
- 28
- 43