2015-01-08 3 views
1

Возможно ли для http://tablesorter.com сортировать по разным значениям в зависимости от того, является ли сортировка по возрастанию или по убыванию?jquery tablesorter: определение порядка сортировки для столбца

Я вижу, как вернуть значения сортировки для ячейки на основе произвольных данных с помощью синтаксического анализатора (т. Е .: http://code-cocktail.in/hidden-value-sorting-in-jquery-tablesorter-plugin/), поэтому возвращение различных значений в разных ситуациях кажется достаточно простым.

Бит, на который я стучу головой, заключается в том, что я не могу определить порядок сортировки при разборе. Похоже, что я могу повторно анализировать клетки, когда-то запрашивается с помощью следующей:

$(".tablesorter").bind("sortStart",function() { 
     $(".tablesorter").trigger("update"); 
}); 

... однако выглядит как в точке «sortStart» порядок сортировки не известен , поэтому анализатор не может предоставлять разные значения в соответствии с порядком сортировки этого столбца.

Возможно ли это? Спасибо :-)

+0

можно попробовать пробираясь через данные, хранящиеся в главном элементе таблицы, и посмотреть, есть ли какие-то текущие настройки сортировки там – charlietfl

ответ

1

Чтобы использовать следующий код, вам необходимо использовать мой fork of tablesorter который имеет css, виджеты и дополнения, которые несовместимы с исходной версией.


Это несколько похоже на this Stackoverflow question за исключением того, что она позволяет сортировать один столбец с использованием двух различных значений (оба ответа хорошо работает с использованием различных методов).

Незначительная модификация требуется использовать одно значение при сортировке по возрастанию, а другой во время сортировки по убыванию (demo):

HTML (одна клетка)

<th class="gamename"> 
    <span class="name">Fun Fun</span> 
    <span class="perc">96%</span> 
</th> 

Script

$(function() { 

    $('#games').tablesorter({ 
     theme: 'blue', 
     textExtraction: { 
      0: function (node, table, cellIndex) { 
       var $n = $(node); 
       // add semi-colon between values 
       return $n.find('.name').text() + ';' + $n.find('.perc').text(); 
      } 
     }, 
     textSorter: function (a, b, direction, columnIndex, table) { 
      if (columnIndex === 0) { 
       var c = table.config, 
        x = a.split(';'), 
        y = b.split(';'), 
        // sort column by percentage when descending sort is active 
        i = c.$headers.eq(0).hasClass('tablesorter-headerDesc') ? 1 : 0; 
       return $.tablesorter.sortNatural($.trim(x[i]), $.trim(y[i])); 
      } else { 
       return $.tablesorter.sortNatural(a,b); 
      } 
     } 
    }); 

}); 
+0

Это действительно звездное - спасибо за время t o назовите меня в правильном направлении (спасибо также за демо-версию - фантастически :-)). –

Смежные вопросы