jQuery Tablesorter - сортировка буквенно-цифровых столбцов - PullRequest
1 голос
/ 14 июля 2011

Я пытаюсь отсортировать столбец, содержащий буквенно-цифровые данные, например:

  • sometext1
  • sometext2
  • sometext3
  • sometext10

к сожалению, Tablesorter не сортируется правильно, т.е.

  • sometext1
  • sometext10
  • sometext2
  • sometext3

Любая помощь будет наиболее ценной.Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Решение:

    $.tablesorter.addParser({
      id: 'alphanum',
      is: function(s) {
        return false;
      },
      format: function(s) {
        var str = s.replace(/(\d{1,2})/g, function(a){
            return pad(a);
        });

        return str;
      },
      type: 'text'
    });

    function pad(num ){
      var s = '00000' + num;
      return s.substr(s.length-5);
    }    
2 голосов
/ 14 июля 2011

http://tablesorter.com/docs/example-parsers.html

Итак, в этом примере показано, как создать собственную логику упорядочения. Посмотрите на функцию:

    format: function(s) { 
        // format your data for normalization 
        return s.toLowerCase().replace(/good/,2).replace(/medium/,1).replace(/bad/,0); 
    }, 

Вам нужно написать функцию javascript, чтобы получить текстовые и числовые части вашей строки "sometext3", а затем отформатировать число с нулевым заполнением "sometext00000003", это решит проблему сортировки и не изменит способ ее отображения в клиенте. .

Вот простой пример:

<script>
function normalizeAlphaNumeric(text) {
r = new RegExp("([^\\d]*)(\\d*)");
var match = r.exec(text);
    return match[1] + pad(match[2]);
}

function pad(num) {
    var s = "000000000" + num;
    return s.substr(s.length-8); // i chose 8
}

document.write(normalizeAlphaNumeric("sometext1") + "<br/>");
document.write(normalizeAlphaNumeric("sometext2")+ "<br/>");
document.write(normalizeAlphaNumeric("sometext3")+ "<br/>");
document.write(normalizeAlphaNumeric("sometext10")+ "<br/>");

</script>

Вывод этого:

sometext00000001
sometext00000002
sometext00000003
sometext00000010

Что можно сортировать сейчас.

...