我一直在使用脚本按照从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>
答案 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')
。