有没有办法在 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 的意思,他的意思是是否可以在 标题文本之后显示图标。 排序工作正常,我只想将图标放在标题文本旁边,如上图,像这样 Request Name .. 我明白你想做什么 【参考方案1】:

一种可能性是收听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 代码,以将文本和图像并排生成为两个元素,例如spandiv。但是您可以将图像左对齐到文本,将background-position: center left; 添加到上面的类中。

【讨论】:

以上是关于有没有办法在 JQuery Datatable 的标题文本旁边显示排序图标?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery DataTable 删除数据后重新加载

jQuery DataTable 删除数据后重新加载

jquery.dataTable和jquery.DataTable初始化

jquery.dataTable和jquery.DataTable初始化

Angular Js中的JQuery数据库Ng-Click无法正常工作?

JQuery的datatable里搜索功能怎么修改