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 that11
will always e after1
but before2
, 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
3 Answers
Reset to default 4You 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