#javascript #jquery #tablesorter
#javascript #jquery #сортировщик таблиц
Вопрос:
Этот может быть немного специализированным, но здесь все равно идет:
Страница для справки:http://greg-j.com/icvm/anticartel/search-results.html
Плагин для справки:http://tablesorter.com
Если вы посмотрите на последние два столбца для «Общих штрафов», вы увидите, что вывод валюты включает в себя x.xxx миллиарды долларов и x.XXX миллионы долларов. Встроенный анализатор валюты не учитывает этот формат. К счастью, плагин позволяет вам написать свой собственный анализатор. Однако я никуда не продвинулся.
Ответ №1:
Посмотрите, работает ли это, я это не тестировал:
$.tablesorter.addParser({
id: 'monetary',
'is': function(s) {
return false;
},
format: function(s) {
var i = s.split('$').join('');
var suffixes = [
{name:'thousand', mult: 1000},
{name:'million', mult: 1000000},
{name:'billion', mult: 1000000000},
{name:'trillion', mult: 1000000000000}
];
for (var j in suffixes) {
if (i.indexOf(' ' suffixes[j].name) != -1) {
i = i.split(' ' suffixes[j].name).join('');
val = parseFloat(i) * suffixes[j].mult;
}
}
return val;
},
type: 'numeric'
});
$("#cartels").tablesorter({
widgets: ['zebra'],
sortList: [[0,0]],
headers: {
4: {
sorter:'monetary'
},
5: {
sorter:'monetary'
}
}
});
Комментарии:
1. Я думаю, вы довольно близки. Массив заголовков имеет нулевую базу, поэтому это заголовки 4 и 5, а не 5 и 6. Однако заголовок 4 сортируется странно. Я обновил страницу примера.
2. Примечание: Вместо значения val, возвращаемого как значение представленного числа (что, я полагаю, вы пытаетесь здесь сделать), оно возвращается как 1000000, 1000000000 или 1000000000000.
3. Я обнаружил проблемы и обновил ваш код. Пожалуйста, просмотрите и одобрите. Большое вам спасибо за помощь!
Ответ №2:
Можете ли вы опубликовать код, который вы пробовали?
Похоже, что в опубликованном вами примере они присваивают каждому слову числовое представление, а затем сортируют по этому:
return s.toLowerCase().replace(/good/,2).replace(/medium/,1).replace(/bad/,0);
Итак, в вашем случае одним из способов может быть замена million на правильное количество нулей и то же самое для billion. Таким образом, по сути, 1 миллион долларов оценивается в 1 000 000 долларов, что касается синтаксического анализатора.
return s.toLowerCase().replace(/million/,000000).replace(/billion/,000000000);
So s
вычисляется до $1000000
после вычисления функции replace. Просто мысль. Не уверен, что это работает, но это может вывести вас на правильный путь.