У меня есть пара проблем с плагином JQuery Tableorter. Если вы нажмете на заголовок столбца, он должен отсортировать данные по этому столбцу, но есть несколько проблем:
Что касается (2), я не могу легко переместить всю строку в нижний колонтитул таблицы, потому что HTML создается библиотекой тегов displaytag, над которой у меня ограниченный контроль.
Что касается (1), я не понимаю, почему сортировка не работает, поскольку я использовал тот же самый JavaScript, что и в простейшем примере в tableorter учебные пособия.
Фактически, есть только одна строка JS-кода, а именно:
<body onload = "jQuery('#communityStats').tablesorter();">
Заранее спасибо, Дон



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


I считать ответ на № 1 состоит в том, что у вас есть пустые поля для некоторых числовых столбцов, в результате чего tableorter обнаруживает этот столбец как «строковый» столбец.
Проблемой могут быть пустые поля (например, они не равны 0), попробуйте использовать собственный синтаксический анализатор, который удаляет все нечисловые значения и переводит значения в целые числа (пример: http://paste.pocoo.org/show/90863/)
Поместите свою строку 'total' в тег <tfoot> </tfoot> прямо перед концом таблицы
Я бы предложил использовать Javascript для удаления последней строки из таблицы. Добавьте нижний колонтитул, а затем повторно добавьте удаленную строку из таблицы. Чтобы решить проблему с пустыми данными в числовой ячейке, вам может потребоваться добавить свой собственный настраиваемый парсер.
$(function() {
$('#communityStats').append("<tfoot></tfoot>");
$('#communityStats > tr:last').remove()
.appendTo('#communityStats > tfoot');
$('#communityStats').tablesorter();
});
Но он отвечает требованиям и не полагается на изменения на стороне сервера, которые, как указывает OP, не могут быть сделаны.
Первая проблема связана с тем, что сортировщик таблиц автоматически определяет столбец как «текстовый» (вероятно, из-за пустых ячеек). Чтобы решить эту проблему, используйте этот код, чтобы инициализировать tableorter и установить все поля на цифру или валюту в зависимости от данных:
<script type = "text/javascript" >
jQuery(document).ready(function()
{
jQuery("#communityStats").tablesorter({
headers: { 2: { sorter:'digit' } ,
3: { sorter:'digit' } ,
4: { sorter:'digit' } ,
5: { sorter:'digit' } ,
6: { sorter:'digit' } ,
7: { sorter:'digit' } ,
8: { sorter:'currency' } ,
9: { sorter:'currency' } ,
10: { sorter:'currency' } ,
11: { sorter:'currency' }
}
});
});
</script>
-1 перебор. Намного более элегантно использовать метаданные и указать алгоритм сортировки, который tableorter должен использовать inline. мой ответ ниже.
@Antony Trupe, но, как указано в вопросе, имеет ли он контроль над помещением метаданных в таблицу html, созданную библиотекой "displaytag"
@The Village Idiot, то он облажался (то есть будет иметь неуклюжий код)
Не забудьте добавить jquery.metadata.js (отдельный проект), если вы хотите установить эти вещи отдельно. Я считаю, что не упоминается прямо в документации.
Решение tvanfosson должно работать на tfoot. tableorter () также распознает nn: { sorter:'date' } как допустимый тип.
Я обнаружил, что следующее будет работать с нераспознанными числовыми (цифровыми) столбцами. Похоже, что 0 считается текстом в текущей версии (2.0.3) tableorter.
Включая образец из tvanfosson, этот скрипт внизу вашей страницы переместит вашу последнюю строку из нижнего колонтитула, что предотвратит ее сортировку с данными внутри tbody и заставит сортировщик использовать числовую сортировку, а не текстовую сортировку. используя, как вы описали.
$(document).ready(function() {
$('#communityStats').append("<tfoot></tfoot>");
$('#communityStats > tr:last').remove()
.appendTo('#communityStats > tfoot');
$("#communityStats").tablesorter({
debug: true,
headers: {
0:{sorter: 'digit'}
...
10:{sorter: 'digit'}
}
});
});
параметр отладки можно удалить, но это поможет вам увидеть, что код устанавливает в качестве парсера каждого столбца. Если у вас установлен firebug, он выводится на консоль.
исправлен заголовок для плагина tableorter:
css
table.tablesorter thead {
position: fixed;
top: 35px; //
}
JS
function tableFixedHeader() {
var tdUnit = $('.tablesorter tbody tr:first').children('td').length;
for(var i=0;i<tdUnit; i++) {
$('.tablesorter thead th').eq(i).width($('.tablesorter tbody td').eq(i).width());
}
$('.tablesorter').css('margin-top',$('.tablesorter thead').height());
}
HTML
<div id = "container">
<div id = "topmenu" style = "height:35px;">some buttons</div>
<div id = "tablelist" style = "width:100%;overflow:auto;">
<table class = "tablesorterw">.....</table>
</div>
</div>
-1 не имеет решения, которое должно явно указать метод сортировки. смотри мой ответ.