2016-04-03 24 views
2

Tabloda dinamik olarak oluşturulmuş bir sütun var. Tabloda İsim, Şirket vb. Sütunlar var, ayrıca versiyon numaraları içeren sütun (1.14.0.2, 1.12.1.0, 1.8.0.1) var.Yazılım sürüm numaralarına sahip bir tablodaki sütun nasıl sıralanır?

Yerinde sıralama için Sortable adlı kitaplığı kullanıyorum. Bu kutunun dışında çalışan harika bir kütüphanedir!

Ad ve Şirket gibi sütunlar için iyi çalışır. Ancak bazı durumlarda Sürüm Numarası için başarısız olur. Ben

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

ait sonuçlanması veri değeri ayarlıyorum Ama sürüm numaraları 1.10.0, 1.14, 1.0.1.2 (Özel Durum)

Sanki sıralanması gerekir olduğunda başarısız

1.0.1.2 
1.10.0 
1.14 

Ama

1.14 
1.0.1.2 
1.10.0 

doğru sonuçlar elde edebilirsiniz bir yolu gibi sıralar?

cevap

1

Bunun gibi, sıralar olmadan bir sayıya ayarladığınız veri değerine göre sıralandığı için buna benzer.

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

Eğer bu bir çeşit düzgün olacak, data-value yoktur özelliğinin veya sürüm numaraları izin süreleri bırakırsanız. Aşağıdaki kemanda gösterildiği gibi.

https://jsfiddle.net/t7xhkkjc/

Düzenleme

Sen fonksiyonunu özel bir sıralama eklemem gerekiyor

doğru sıralama sürüm numaraları onlara

geçersiz kılarak orijinal sıralama türlerini kaybetmemeniz Yani

// 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); 

Ayrıca, th'yi devre dışı bırakmanız gerekir. tablonuzdan data-sortable'u kaldırarak otomatik başlatma. Bu, sıralama işlevini tabloya eklemeden önce yeni sıralama türünü eklemenize olanak tanır.

Ardından Başlangıçta ben veri değeri ile kullanıyordum

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

Sortable.initTable(yourTable); 

https://jsfiddle.net/p4w5bup3/

+0

ile masaya sıralama ilklendirebilirsiniz. Aşağıdaki değerler için başarısız olur. 1.8.0.1 1.14.2.0 https://jsfiddle.net/st9zhbc0/ – localhost

+0

1.9.2.0 Eğer yardım edeceğini masanıza bir örneğini sonrası Belki olur? –

+0

Bu jsFiddle öğesini kullanın. https://jsfiddle.net/st9zhbc0/ – localhost

İlgili konular