2016-04-03 2 views
2

У меня есть столбики в моей таблице, которые генерируются динамически. В таблице указаны столбцы, такие как Name, Company и т. Д. Он также получил столбец, который содержит номера версий (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 (Special Case)

Он должен сортировать как

1.0.1.2 
1.10.0 
1.14 

Но сортирует как

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

Кроме того, вам необходимо отключить e auto initialisation, удалив 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