Проблема с JQuery tableorter

У меня есть пара проблем с плагином JQuery Tableorter. Если вы нажмете на заголовок столбца, он должен отсортировать данные по этому столбцу, но есть несколько проблем:

  1. Строки отсортированы неправильно (1, 1, 2183, 236)
  2. Итоговая строка включается в сортировку

Что касается (2), я не могу легко переместить всю строку в нижний колонтитул таблицы, потому что HTML создается библиотекой тегов displaytag, над которой у меня ограниченный контроль.

Что касается (1), я не понимаю, почему сортировка не работает, поскольку я использовал тот же самый JavaScript, что и в простейшем примере в tableorter учебные пособия.

Фактически, есть только одна строка JS-кода, а именно:

<body onload = "jQuery('#communityStats').tablesorter();">

Заранее спасибо, Дон

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
16
0
28 316
6

Ответы 6

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

-1 не имеет решения, которое должно явно указать метод сортировки. смотри мой ответ.

antony.trupe 09.06.2009 08:21
  1. Проблемой могут быть пустые поля (например, они не равны 0), попробуйте использовать собственный синтаксический анализатор, который удаляет все нечисловые значения и переводит значения в целые числа (пример: http://paste.pocoo.org/show/90863/)

  2. Поместите свою строку 'total' в тег <tfoot> </tfoot> прямо перед концом таблицы

Я бы предложил использовать Javascript для удаления последней строки из таблицы. Добавьте нижний колонтитул, а затем повторно добавьте удаленную строку из таблицы. Чтобы решить проблему с пустыми данными в числовой ячейке, вам может потребоваться добавить свой собственный настраиваемый парсер.

   $(function() {
       $('#communityStats').append("<tfoot></tfoot>");
       $('#communityStats > tr:last').remove()
                                     .appendTo('#communityStats > tfoot');
       $('#communityStats').tablesorter();
   });

Но он отвечает требованиям и не полагается на изменения на стороне сервера, которые, как указывает OP, не могут быть сделаны.

tvanfosson 09.06.2009 15:59

Первая проблема связана с тем, что сортировщик таблиц автоматически определяет столбец как «текстовый» (вероятно, из-за пустых ячеек). Чтобы решить эту проблему, используйте этот код, чтобы инициализировать 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 09.06.2009 08:22

@Antony Trupe, но, как указано в вопросе, имеет ли он контроль над помещением метаданных в таблицу html, созданную библиотекой "displaytag"

TheVillageIdiot 09.06.2009 08:43

@The Village Idiot, то он облажался (то есть будет иметь неуклюжий код)

antony.trupe 09.06.2009 17:10

Не забудьте добавить jquery.metadata.js (отдельный проект), если вы хотите установить эти вещи отдельно. Я считаю, что не упоминается прямо в документации.

Soraz 06.08.2010 14:04

Решение tvanfosson должно работать на tfoot. tableorter () также распознает nn: { sorter:'date' } как допустимый тип.

gordon 23.04.2013 02:15

Я обнаружил, что следующее будет работать с нераспознанными числовыми (цифровыми) столбцами. Похоже, что 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, он выводится на консоль.

catalpa 19.05.2009 22:30

исправлен заголовок для плагина 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>

Другие вопросы по теме