jQuery Tablesorter не сортирует столбцы, если есть класс - PullRequest
2 голосов
/ 12 октября 2011

В настоящее время я использую следующее, чтобы указать моей таблице не сортировать определенные столбцы с помощью плагина jquery Tablesorter:

$(".uiGridContent table").tablesorter({
        sortList: [[1, 0]],
        headers: {
            0: { sorter: false },
            5: { sorter: false },
            6: { sorter: false }
        }
    });

Проблема заключается в том, что в моем приложении пользователь может добавлять и удалять столбцы, поэтому порядокможет измениться, поэтому мой текущий код не является жизнеспособным решением.Если я помещаю класс в столбцы, я НЕ хочу сортировать, например, <col class="nosort" /> как я могу сделать так, чтобы он не сортировал эти столбцы?

Поскольку я использую <col />, я попробовал следующее:

$filter_ignore = $("col.nosort").closest("th").index();

    $(".uiGridContent table").tablesorter({
        sortList: [[1, 0]],
        headers: {
            $filter_ignore: {
                sorter: false
            }
        }
    });

Но не работает: /

Я думаю, мне нужен какой-то цикл, чтобы найти все числа со столбцами для них с помощью выражения!Вот пример моей таблицы:

<table>
 <colgroup>
  <col class="nosort" />
  <col />
 </colgroup>
  <thead>
   <tr>
    <th scope="col">a</th>
    <th scope="col">b</th>
   </tr>
  </thead>
  <tbody>
   <tr>
    <td scope="col">a</td>
    <td scope="col">b</td>
   </tr>
  </tbody>
</table>

Спасибо

Ответы [ 4 ]

11 голосов
/ 13 октября 2011
function setupTablesorter() {
    $('table.tablesorter').each(function (i, e) {
        var myHeaders = {}
        $(this).find('th.nosort').each(function (i, e) {
            myHeaders[$(this).index()] = { sorter: false };
        });

        $(this).tablesorter({ widgets: ['zebra'], headers: myHeaders });
    });    
}

Кажется, это работает лучше всего!

2 голосов
/ 13 октября 2011

У меня на самом деле есть форк tableorter , который позволяет вам добавить sorter-false класс к заголовку таблицы, чтобы предотвратить сортировку. Вы также можете установить анализатор с помощью этого метода (например, sorter-currency и т. Д.). Вот демонстрационная программа, использующая имена классов .

1 голос
/ 07 февраля 2013

Согласно документации , теперь вы можете использовать class="sorter-false"

0 голосов
/ 12 октября 2011

Afaik <col class="nosort" /> не добавит этот класс к cols в своей области видимости, и я не знаю, как получить все coll в colgroup или, если это вообще возможно. Однако, если вы добавите класс в th, то легко будет отключить сортировку по нему.

var $filter_ignore = {};

$("th.nosort").each(function(i) {
    $filter_ignore[i] = {sorter: false};
});

$("table").tablesorter({
    sortList: [[1, 0]],
    headers: $filter_ignore
});

С этой разметкой

<table>
 <colgroup>
  <col class="nosort" />
  <col />
 </colgroup>
  <thead>
   <tr>
    <th scope="col" class="nosort">a</th>
    <th scope="col">b</th>
   </tr>
  </thead>
  <tbody>
   <tr>
    <td scope="col">a</td>
    <td scope="col">b</td>
   </tr>
  </tbody>
</table>
...