Использование TableSorter для сортировки двух столбцов таблицы, зависящих от кода - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь построить таблицу с двумя столбцами, зависящими от кода.Поведение, которое я пытаюсь достичь, состоит в том, что если столбец 1 или 2 отсортирован, в порядке возрастания или убывания, другой столбец сортируется в порядке убывания.Столбец, который не сортируется, должен поддерживать нисходящий порядок.Таблица может содержать повторяющиеся записи в любом столбце.Я читал о sortForce как об опции принудительной сортировки столбца 1 на основе столбца 2, но я не нашел способа заставить одинаково вести себя как столбец 1, так и столбец 2 в отношении состояния другого столбца.Как этого достичь?

В настоящее время у меня есть следующая конфигурация.

$(function () {
  $('table').tablesorter({
    ignoreCase: true,
    sortList: [ [0,0], [1,0] ],
    sortAppend: {
        1 : [[ 2, 'd' ]], // always apply descending sort
        2 : [[ 1, 'd' ]]
    },
    sortInitialOrder: "desc",
    sortRestart: true
  });
});
<table class="tablesorter">
    <thead>
        <tr>
            <th>Column 1/th>
            <th>Column 2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>A</td>
            <td>B</td>
        </tr>
        <tr>
            <td>B</td>
            <td>A</td>
        </tr>
        <tr>
            <td>C</td>
            <td>A</td>
        </tr>
        <tr>
            <td>B</td>
            <td>A</td>
        </tr>
    </tbody>
</table>


Following the table below, lets say I click to sort column 1 in descending order.  Then I would like for the columns to be ordered as:
C : A
C : B
B : A
A : B

If I click on column 1 again to get a ascending order, I would like column 2 to maintain its descending order based off of column 1.
A : B
B : A
C : A
C : B

If I click on column 2 to sort descending, I would like the inverse behavior.  
A : B
C : B
B : A
C : A

And in the last case, if I click to have column 2 in ascending order, it would read as.
B : A
C : A
A : B
C : B

1 Ответ

0 голосов
/ 20 февраля 2019

Вы ищете sortAppend вариант .Вместо того, чтобы устанавливать его с массивом значений, установите его как объект, содержащий ключ столбца (индекс или селектор) и добавляемый тип сортировки.

В этом случае я считаю, что следующие параметры удовлетворят ваши потребности:

$(function () {
    $('table').tablesorter({
        ignoreCase: true,
        sortList: [ [0,0], [1,0] ],
        sortAppend: {
            1 : [[ 2, 'd' ]], // always apply descending sort
            2 : [[ 1, 'd' ]]
        },
        sortInitialOrder: "desc",
        sortRestart: true
    });
});

* Примечание. Направление сортировки можно задать с помощью a (по возрастанию), d (по убыванию), n (далее), s (то же самое) и o(напротив):

...