繁体   English   中英

Jquery排序表td没有正确排序货币

[英]Jquery sort table td not sorting currency properly

嗨,我是 jquery 和 HTML 的新手,我正在尝试按货币对我的表格进行排序,但如果它的货币排序不正确,但如果按字母顺序排序它的工作,任何人都可以帮助我或指导我,我将非常感谢您提前。我的货币格式有千位分隔符和小数点。 每当点击 th 时,该行就会被排序

 function sortTable(f, n) { var rows = $('#mytable tbody tr').get(); rows.sort(function(a, b) { var A = getVal(a); var B = getVal(b); if (A < B) { return -1 * f; } if (A > B) { return 1 * f; } return 0; }); function getVal(elm) { var v = $(elm).children('td').eq(n).text().toUpperCase(); if ($.isNumeric(v)) { v = parseInt(v, 10); } return v; } $.each(rows, function(index, row) { $('#mytable').children('tbody').append(row); }); } var f_sl = 1; var f_nm = 1; $("#sl").click(function() { f_sl *= -1; var n = $(this).prevAll().length; sortTable(f_sl, n); }); $("#nm").click(function() { f_nm *= -1; var n = $(this).prevAll().length; sortTable(f_nm, n); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table id="mytable"> <thead> <tr> <th id="sl">VAL</th> <th id="nm">name</th> </tr> </thead> <tbody> <tr> <td>RM 1,000.00</td> <td>AINA (W)</td> </tr> <tr> <td>RM 20,000.00</td> <td>HEYZA</td> </tr> <tr> <td>RM 5,000.15</td> <td>ANA</td> </tr> <tr> <td>RM 5,000.16</td> <td>ZED</td> </tr> </tbody> </table>

您可以使用localeCompare以及它的numeric选项

代替:

if (A < B) {
  return -1 * f;
}
if (A > B) {
  return 1 * f;
}
return 0;

你会使用:

if (f === 1) {
  return A.localeCompare(B, 'en', {numeric: true});
} else {
  return B.localeCompare(A, 'en', {numeric: true});
}

此外, localeCompare可以将数值作为Strings 处理,因此您不需要在getVal函数中使用parseInt() - 处理 Numbers 的唯一额外更改是使用 Regex 在排序时从您的数字中删除所有,分隔符; 排序后不会有任何影响,也不会影响单词

 function sortTable(f, n) { var rows = $('#mytable tbody tr').get(); rows.sort(function(a, b) { var A = getVal(a).replace(/(\\d),(?=\\d)/g, '$1'); var B = getVal(b).replace(/(\\d),(?=\\d)/g, '$1'); if (f === 1) { return A.localeCompare(B, 'en-UK', { numeric: true }); } else { return B.localeCompare(A, 'en-UK', { numeric: true }); } }); function getVal(elm) { return $(elm).children('td').eq(n).text().toUpperCase(); } $.each(rows, function(index, row) { $('#mytable').children('tbody').append(row); }); } var f_sl = 1; var f_nm = 1; $("#sl").click(function() { f_sl *= -1; var n = $(this).prevAll().length; sortTable(f_sl, n); }); $("#nm").click(function() { f_nm *= -1; var n = $(this).prevAll().length; sortTable(f_nm, n); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table id="mytable"> <thead> <tr> <th id="sl">VAL</th> <th id="nm">name</th> </tr> </thead> <tbody> <tr> <td>RM 6,533.00</td> <td>AINA (W)</td> </tr> <tr> <td>RM 20.00</td> <td>HEYZA</td> </tr> <tr> <td>RM 1,174.00</td> <td>ANA</td> </tr> <tr> <td>RM 50.16</td> <td>ZED</td> </tr> </tbody> </table>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM