如何对具有软件版本号的表格中的列进行排序?

问题描述:

我的表中有一列是动态生成的。表得到名称,公司等栏目,它也得到了包含版本号(1.14.0.2,1.12.1.0,1.8.0.1)的列。如何对具有软件版本号的表格中的列进行排序?

我正在使用名为Sortable的库进行就地排序。这是一个伟大的图书馆,它只是开箱即用!

它适用于名称和公司等列。但在某些情况下版本号会失败。我设置的数据值导致的

str_replace('.','',$version_number) 

但当版本号1.10.0,1.14,1.0.1.2(特殊情况)

应该有点像失败

1.0.1.2 
1.10.0 
1.14 

但它像排序

1.14 
1.0.1.2 
1.10.0 

什么办法可以实现正确的结果?

它的排序方式就是这样,因为它按数据值排序,您将数据值设置为不带句点的数字。

1.14  --> 114 (smallest) 
1.0.1.2 --> 1012 
1.10.0 --> 1100 (largest) 

如果离开data-value属性不存在,或离开时间的版本号,它会按正常。如下面的小提琴演示。

https://jsfiddle.net/t7xhkkjc/

编辑

您需要添加一个自定义排序函数正确排序版本号

// Credit for function http://*.com/a/7717160/769237 
var customTypes = [{ 
    name: 'version', 
    defaultSortDirection: 'descending', 
    match: function(a) { 
    return a.match(/([1-9]+\.?)+/g); 
    }, 
    compare: function (a, b) { 
    var i, cmp, len, re = /(\.0)+[^\.]*$/; 
    a = (a + '').replace(re, '').split('.'); 
    b = (b + '').replace(re, '').split('.'); 
    len = Math.min(a.length, b.length); 
    for(i = 0; i < len; i++) { 
     cmp = parseInt(a[i], 10) - parseInt(b[i], 10); 
     if(cmp !== 0) { 
     return cmp; 
     } 
    } 
    return a.length - b.length; 
    } 
}]; 

,这样你就不会被重写他们

失去了原有的排序类型
var customAndOriginalTypes = Sortable.types.concat(customTypes); 

Sortable.setupTypes(customAndOriginalTypes); 

此外,您需要禁用th通过从您的表中删除data-sortable来自动初始化。这允许您在向表中添加排序功能之前添加新的排序类型。

然后,您可以用初始化

var yourTable = document.querySelector('#your-table'); 

Sortable.initTable(yourTable); 

https://jsfiddle.net/p4w5bup3/

+0

起初我是用与数据值在桌子上的排序。它不符合以下值。 1.9.2.0 1.8.0.1 1.14.2.0 https://jsfiddle.net/st9zhbc0/ – localhost

+0

也许如果你发布你的表的例子它会帮助吗? –

+0

使用这个jsFiddle。 https://jsfiddle.net/st9zhbc0/ – localhost