我使用sort()来过滤包含数字的数据的列表,但是数字存在问题,较大的数字在顶部而不是在底部排序。
列表并不总是数字。
<ul class="fliter-container">
<li data-filter="100 x 10"> 100 x 10 </li>
<li data-filter="101 11"> 101 x 11 </li>
<li data-filter="109"> 109 </li>
<li data-filter="someword"> someword </li>
<li data-filter="17"> 17 </li>
<li data-filter="18"> 18 </li>
<li data-filter="my filter"> my filter </li>
<li data-filter="19"> 19 </li>
</ul>
$('.filter-container').each(function(){
var mylist = $(this);
var listitems = mylist.children('[data-filter]').get();
listitems.sort(function(a, b) {
return $(a).attr('data-filter').toUpperCase().localeCompare($(b).attr('data-filter').toUpperCase() , undefined, {numeric: true, sensitivity: 'base'});
});
$.each(listitems, function(idx, itm) {
mylist.append(itm);
});
});
更新:我更新了我的代码,在此处找到了解决方案Javascript : natural sort of alphanumerical strings
答案 0 :(得分:0)
编辑:鉴于您稍后添加到帖子中的新信息(即值也可以是非数字),当然这个答案不再有效......
原始答案:
您正在排序字符串,而不是数字。如果您希望将它们保留为字符串,请在排序时将其修改为x
和y
,以便将它们转换为数字,以便进行比较,例如
var x = parseInt($(a).attr('data-filter'));
var y = parseInt($(b).attr('data-filter'));