有没有办法在 JQuery Datatable 的标题文本旁边显示排序图标?
Posted
技术标签:
【中文标题】有没有办法在 JQuery Datatable 的标题文本旁边显示排序图标?【英文标题】:Is there any way to display sorting icon next to the header text in JQuery Datatable ? 【发布时间】:2017-05-14 00:16:17 【问题描述】:有没有办法像上图一样在标题文本旁边显示数据表的排序图标?
【问题讨论】:
是的,datatables
已经做到了,请查看:datatables.net/examples/basic_init/table_sorting.html。如果您有任何疑问,这个问题可以帮助您:***.com/questions/8286508/…
@RicardoPontual,这不是 OP 的意思,他的意思是是否可以在 标题文本之后显示图标。
排序工作正常,我只想将图标放在标题文本旁边,如上图,像这样 一种可能性是收听draw.dt event。
每次绘制数据表时,您可以根据相应列标题的宽度重新定位 background-position-x(图标):
// the following extension comes from http://***.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" >
<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>
【讨论】:
哇!这很棒..但我在这里看到的唯一问题是在浏览器收缩和扩展其折叠过程中..有什么办法可以解决这个问题吗? 优秀。对于左对齐的标题文本,请使用var xPos = $(ele).textWidth() + 5;
【参考方案2】:
datatables
使用排序图像的方式你可以更改为任何你想要的图像,你只需要在这些类中设置background-image
:
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 */
要将其与列文本对齐,这很复杂,因为图像被放置为th
标记的背景。您需要更改datatables
代码,以将文本和图像并排生成为两个元素,例如span
和div
。但是您可以将图像左对齐到文本,将background-position: center left;
添加到上面的类中。
【讨论】:
以上是关于有没有办法在 JQuery Datatable 的标题文本旁边显示排序图标?的主要内容,如果未能解决你的问题,请参考以下文章
jquery.dataTable和jquery.DataTable初始化
jquery.dataTable和jquery.DataTable初始化