我有一个名称和年龄表,我希望用户能够排序。当页面初始加载时,sortList
按从最旧到最小的顺序列出行,然后从A到Z依次列出。
当用户实际点击年龄<th>
时,我想要同样的事情(SECONDARY字母排序),但sortForce
正在按字母顺序排序。还有其他选择吗?
$('#super_results table').tablesorter({
sortForce: [[0,0]],
sortList: [[1,1],[0,0]]
});
还是我误解了sortForce
? Documentation here.
更新:我找不到一个插件来为我做这个,所以我写了一些代码来排序构建表的多维数组。如果你有一个名为tableContents
的数组,而tableContents[0]
是一个名字的子数组,而tableContents[1]
是一个年龄的子数组,那么调用tableContents.sort(numSort)
将首先从最旧的数组到数组最年轻,然后从A到Z.(num2Sort
先排序最小到最旧。)然后,您可以使用createHtml(data)
重新创建表格,并使用结果替换旧表格。
function numSort(a, b) {
if (a[1] === b[1]) {
if (a[0] === b[0]) {
return 0;
}
return (a[0] < b[0]) ? -1 : 1;
}
return (a[1] < b[1]) ? 1 : -1;
}
function num2Sort(a, b) {
if (a[1] === b[1]) {
if (a[0] === b[0]) {
return 0;
}
return (a[0] < b[0]) ? -1 : 1;
}
return (a[1] < b[1]) ? -1 : 1;
}
function createHtml(data) {
var completeListLength = MYAPP.completeList.length,
html = '<table>';
html += '<thead>';
html += '<tr>';
html += '<th>names</th>';
html += '<th>ages</th>';
html += '</tr>';
html += '</thead>';
html += '<tbody>';
for (var i = 0; i < completeListLength; i += 1) {
html += '<tr>';
html += '<td>' + data[i][0] + '</td>';
html += '<td>' + data[i][1] + '</td>';
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
return html;
}
答案 0 :(得分:3)
我遇到了同样的问题,偶然发现了这个问题:
答案 1 :(得分:0)
我不熟悉tablesorter,但是通过查看文档,看起来sortForce属性将列锁定为特定的顺序 - 然后允许其次对其他列进行排序。我认为这不是你想要的。
答案 2 :(得分:0)
第一个答案中的链接被破坏了。这是此页面的webarchive链接。
jQuery tablesorter secondary sorting problem
我稍微修改了这段代码,以便在v.2.22.3中工作(也许可以在其他版本中使用)
从tablesorter的代码中剪切这些行:
if (c.sortForce !== null) {
arry = c.sortForce;
for (col = 0; col < arry.length; col++) {
if (arry[col][0] !== indx) {
c.sortList.push(arry[col]);
}
}
}
然后在c.sortList.push([ indx, order ]);
之后粘贴它 - 使用之前的代码在地方下方的某些行。
Tablesorter v.2.0有变量的另一个名称(对于c =&gt; config,indx =&gt; i等),但你可以找到正确的地方搜索sortForce
- 它在Tablesorter的代码中有几个外观