2016-04-03 4 views
2

テーブル内に動的に生成される列があります。テーブルにはName、Companyなどのカラムがあり、バージョン番号(1.14.0.2、1.12.1.0、1.8.0.1)を含むカラムもあります。ソフトウェアバージョン番号の表の列をソートする方法は?

インプレースソートにSortableというライブラリを使用しています。これはすぐに使える素晴らしいライブラリです!

名前や会社などの列では問題ありません。しかしバージョンナンバーでは失敗することがあります。それは

1.0.1.2 
1.10.0 
1.14 
のように並べ替える必要があります

を私は

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

結果にデータ値を設定していますが、バージョン番号は1.10.0、1.14、1.0.1.2(特殊ケース)のときには失敗しました

しかし、それは

1.14 
1.0.1.2 
1.10.0 

のように、私は正しい結果を得ることができます任意の方法をソート?

答えて

1

データ値によってソートされるので、ソートはピリオドのない数値に設定されます。

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

あなたはdata-valueが不在属性、またはバージョン番号でピリオドを残しておくと、それは正しく並べ替えます。下のフィドルで実証されているように。

https://jsfiddle.net/t7xhkkjc/

編集あなたは彼らに

をオーバーライドすることで、元のソートタイプを失わないように、正しくバージョン番号

// Credit for function http://stackoverflow.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

関連する問題