jQuery / Tablesorter:维护二级字母排序

时间:2011-01-02 03:45:03

标签: javascript jquery tablesorter

我有一个名称和年龄表,我希望用户能够排序。当页面初始加载时,sortList按从最旧到最小的顺序列出行,然后从A到Z依次列出。

当用户实际点击年龄<th>时,我想要同样的事情(SECONDARY字母排序),但sortForce正在按字母顺序排序。还有其他选择吗?

$('#super_results table').tablesorter({
    sortForce: [[0,0]],
    sortList: [[1,1],[0,0]]
});

还是我误解了sortForceDocumentation 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;
}

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,偶然发现了这个问题:

jQuery tablesorter secondary sorting problem

答案 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的代码中有几个外观