最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Jquery sort table data with numbers - Stack Overflow

programmeradmin6浏览0评论

Jquery sort table data with numbers

I have sorted this table in ascending order but I want it in order of a1,a2,a3,a11.

Can anyone help, please?

function sortTable(table, order) {
        var asc   = order === 'asc',
            tbody = table.find('tbody');
        tbody.find('tr').sort(function(a, b) {
            if (asc) {
                return jQuery('td:first', a).text().localeCompare(jQuery('td:first', b).text());
        } else {
            return jQuery('td:first', b).text().localeCompare(jQuery('td:first', a).text());
        }
        }).appendTo(tbody);
        }

        sortTable($('#mytable'),'asc');
<script src=".1.1/jquery.min.js"></script>
<table name="mytable" id="mytable">
  <tbody>
    <tr><td>a 11</td></tr>
    <tr><td>a 3</td></tr>
    <tr><td>a 2</td></tr>
    <tr><td>a 1</td></tr>
  </tbody>
</table>

Jquery sort table data with numbers

I have sorted this table in ascending order but I want it in order of a1,a2,a3,a11.

Can anyone help, please?

function sortTable(table, order) {
        var asc   = order === 'asc',
            tbody = table.find('tbody');
        tbody.find('tr').sort(function(a, b) {
            if (asc) {
                return jQuery('td:first', a).text().localeCompare(jQuery('td:first', b).text());
        } else {
            return jQuery('td:first', b).text().localeCompare(jQuery('td:first', a).text());
        }
        }).appendTo(tbody);
        }

        sortTable($('#mytable'),'asc');
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table name="mytable" id="mytable">
  <tbody>
    <tr><td>a 11</td></tr>
    <tr><td>a 3</td></tr>
    <tr><td>a 2</td></tr>
    <tr><td>a 1</td></tr>
  </tbody>
</table>

Share Improve this question edited Jan 16, 2018 at 13:43 vaishali kapadia asked Sep 15, 2017 at 11:16 vaishali kapadiavaishali kapadia 94411 silver badges22 bronze badges 2
  • Remember that the .sort() function sorts lexicographically, meaning that 11 will always e after 1 but before 2, for example. If you want to look for natural sort, you can try third-party plugins, such as: natsort. There are also other solutions already available on StackOverflow, just search for natural sort. – Terry Commented Sep 15, 2017 at 11:23
  • Possible duplicate of Sort Array of numeric & alphabetical elements (Natural Sort) – Terry Commented Sep 15, 2017 at 11:24
Add a ment  | 

3 Answers 3

Reset to default 4

You can set options parameter as {numeric: true }

var sorted = $('#mytable tbody tr').sort(function(a, b) {
  var a = $(a).find('td:first').text(), b = $(b).find('td:first').text();
  return a.localeCompare(b, false, {numeric: true})
})

$('#mytable tbody').html(sorted)
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table name="mytable" id="mytable">
  <tbody>
    <tr><td>a 11</td></tr>
    <tr><td>a 3</td></tr>
    <tr><td>a 2</td></tr>
    <tr><td>a 1</td></tr>
  </tbody>
</table>

Because parison is done from left to right, you can try to pad numbers with zeros like a 01, a 02, a 03, a 11

@Nenad nailed it: 'kn' does not seem to work, use option numeric in .localeCompare() like:

.localeCompare(jQuery('td:first', b).text(),'en',{numeric:true});

This will take care of the numbering problem. See here: https://developer.mozilla/de/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

发布评论

评论列表(0)

  1. 暂无评论