jQuery按日期对html表行进行排序

时间:2018-11-21 06:55:39

标签: jquery html

我一直在使用脚本按照从stackoverflow获得的日期字符串对表进行排序,但是代码已停止工作。请问有人知道为什么吗?

$('tr.Entries').each(function() {
  var $this = $(this),
    t = this.cells[1].textContent.split('-');
  $this.data('_ts', new Date(t[2], t[1] - 1, t[0]).getTime());
}).sort(function(a, b) {
  return $(a).data('_ts') > $(b).data('_ts');
}).appendTo('tbody');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table-bordered" border="1">
  <thead>
    <tr class="Headers">
      <th>Number</th>
      <th>Date start
      </th>
      <th>Date end</th>
    </tr>
  </thead>
  <tbody>
    <tr class="Entries" data-id="13">
      <td data-field-type="string">1234</td>
      <td data-field-type="date">01-04-2015</td>
      <td data-field-type="date">01-04-2015</td>
    </tr>
    <tr class="Entries" data-id="24">
      <td data-field-type="string">1352</td>
      <td data-field-type="date">04-10-2012</td>
      <td data-field-type="date">23-10-2015</td>
    </tr>
    <tr class="Entries" data-id="8">
      <td data-field-type="string">1124</td>
      <td data-field-type="date">13-05-2014</td>
      <td data-field-type="date">01-04-2015</td>
    </tr>
    <tr class="Entries" data-id="23">
      <td data-field-type="string">1652</td>
      <td data-field-type="date">07-11-2013</td>
      <td data-field-type="date">22-10-2015</td>
    </tr>
    <tr class="Entries" data-id="23">
      <td data-field-type="string">1652</td>
      <td data-field-type="date">04-12-2013</td>
      <td data-field-type="date">22-10-2015</td>
    </tr>
  </tbody>
</table>

1 个答案:

答案 0 :(得分:0)

传递给compareFunction的{​​{1}}需要返回一个整数,如果使用sort,则返回一个布尔值。该文档提到:

  
      
  • 如果compareFunction(a,b)小于0,则将a排序为小于b的索引,即a在前。
  •   
  • 如果compareFunction(a,b)返回0,则a和b彼此保持不变,但对所有不同元素进行排序。
  •   
  • 如果compareFunction(a,b)大于0,则将b排序为小于a的索引,即b首先出现。
  •   

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

需要进行的更改是根据所需顺序将<替换为$(a).data('_ts') < $(b).data('_ts')$(a).data('_ts') - $(b).data('_ts')