Сортировка таблиц jQuery и проблема с валютой

#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. Просто мысль. Не уверен, что это работает, но это может вывести вас на правильный путь.