jQuery / Tablesorter: поддерживать вторичный алфавитный вид - PullRequest
3 голосов
/ 02 января 2011

У меня есть таблица имен и возрастов, которую я хочу, чтобы пользователь мог сортировать.Когда страница загружается изначально, sortList перечисляет строки в порядке от самой старой до самой младшей, а затем во вторую очередь от A до Z.

Я хочу то же самое (ВТОРОЙ алфавитный тип), когда пользователь фактически нажимает навозраст <th>, но sortForce делает алфавитную сортировку первичной.Есть ли альтернатива?

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

Или я неправильно понимаю sortForce? Документация здесь.

Обновление: Я не смог найти плагин, чтобы сделать это для меня, поэтому я написал некоторый код, который сортирует многомерный массив, который строит таблицу,Если у вас есть массив с именем 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 ]

3 голосов
/ 09 декабря 2011

У меня была та же проблема, и я наткнулся на это:

jQuery TableSorter вторичная проблема сортировки

0 голосов
/ 11 мая 2016

Ссылка в первом ответе не работает.Вот ссылка на веб-архив этой страницы.

Проблема вторичной сортировки таблиц jQuery

Я немного изменил этот код для работы в v.2.22.3 (возможно, будет работатьв других версиях)

Вырежьте эти строки из кода сортировщика таблиц:

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 => config, indx => i и т. Д.), Но вы можете найти правильное место для поиска sortForce - он несколько раз встречается в коде Tablesorter

0 голосов
/ 02 января 2011

Я не знаком с таблицей сортировки, но, посмотрев документацию, выясняется, что свойство sortForce блокирует столбец в определенном порядке, что затем позволяет вторично сортировать другие столбцы. Я не думаю, что это именно то, что вы хотите.

...