2

我已经为我经常访问的当地自行车商店建立了一个网站,我目前在http://mattgreenfield.co.uk/bikestore/store.html托管一个非现场版本。

我刚刚安装了出色的 list.js ( http://listjs.com ) 以使商店页面能够进行排序和过滤(店主不希望在线销售产品,而是让客户打电话访问实体店店铺)。

它似乎工作得很好,但按价格排序按钮似乎不是按价格排序,值应该从高到低排序,但不是。这可能与仅按数字的第一位排序有关吗?例如,4000 英镑的排序似乎低于 479 英镑——第一位数字相同,但 7 大于 0(第二位数字)。

我可能错过了一些简单的事情,因为我复制代码的原始示例是按年份排序的,年份只有 4 位数字,因此不会发生此问题。

4

2 回答 2

2

£3,799.99不是一个真正的数字。尽管我们人类很容易忽略逗号和井号,但计算机并不那么聪明。解决方案是将 list.js 的内部值替换为可排序的浮点数。

// loop through the list
$.each(userList.items, function(k, item){
    var val = item._values; 
    // this strips anything that is not a dot or digit
    var price = item._values.price.replace(/[^\d\.]/g,"");
    item._values.price = parseFloat(price); 
});
于 2013-12-13T09:05:04.287 回答
1

一个新的解决方案出现在List.js Github中,使用 List.js 版本 1.5.0:

您可以使用普通值定义自定义数据属性(无逗号并使用表示小数)。

<td class="name">Random Name</td>    
<td class="price" data-price="12345.00">$12,345.00</td>

您必须对选项数组进行一些小的更改,如下所示:

<script type="text/javascript">
    var sortableClassValues = [
        "name",
        { name: 'price', attr: 'data-price' }
    ]

    var listOptions = {
        valueNames: sortableClassValues
    };

    var myList = new List('table_ID', listOptions);
</script>

如果你想有一个默认排序,你可以在初始化列表后添加:

myList.sort("price", {
    order: "desc"
});

这是一个工作示例,链接自 Github:https ://kanaxx.github.io/listjs/number-sort.html

于 2019-09-17T08:03:49.423 回答