2015-11-23 2 views
1

У меня возникли проблемы с сортировкой моего Datatable. У меня есть столбец, показывающий игроков на сервере вроде этого «0/50», когда я пытаюсь сортировать этот столбец, он не сортирует числа должным образом. Он покажет, с тем, как это:Bootstrap Datatables Сортировка по части содержимого ячейки

  • 0/50
  • 10/30
  • 2/40
  • 3/30
  • 4/30
  • 9/25

Я хотел бы сортировать только первый номер. Например:

  • 0/50
  • 2/40
  • 3/30
  • 4/30
  • 9/25
  • 10/30

Я знаю это, вероятно, можно было бы сделать, просто разделив 2 значения на их собственный столбец, но по эстетическим соображениям я хотел бы, чтобы они были в одной колонке.

Вот мой HTML Layout:

<div class="row"> 
    <div class="col-lg-12"> 
     <table id="serverList" class="table table-striped table-bordered" cellspacing="0" width="100%"> 
      <thead> 
       <tr> 
        <th>ID</th> 
        <th>Server Infomation</th> 
        <th>Players</th> 
       </tr> 
      </thead> 
     </table> 
    </div> 
</div> 

Вот мой Javascript:

$(document).ready(function() {    
      var t = $('#serverList').DataTable(); 

      $.getJSON('../php/queryAll.php', function(data){ 
       var server = []; 
       $.each(data, function(key, val) { 
        $.each(val, function(key2, val2) { 
         server.push(val2); 
        }); 
        String.prototype.replaceAll = function(str1, str2, ignore){return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);} 
        if(server[14] > 0) 
        { 
         hostName = server[1].replaceAll('[','<span style="color:#'); 
         server[1] = hostName.replaceAll(']',';">'); 

         t.row.add([server[0],server[1],server[8] + '/' + server[7]]).draw(false); 
        } 
        server = []; 
       }); 
       $("#loader").fadeOut(250, function(){ 
        $(".row").fadeIn(1000); 
       }); 
      }); 
     }); 

Спасибо за любую помощь вы можете предоставить.

+0

Вы можете сделать это, указав скрытый столбец только с сортируемыми данными (0,2,3 и т. Д.). Вы можете указать, что этот столбец используется для сортировки при щелчке по сортировке столбцов с помощью свойства [columns.orderData] (https://datatables.net/reference/option/columns.orderData). Существует множество примеров, например [stackoverflow.com/questions/30538878/datatables-v1-10-sorting-by-hidden-column] (http://stackoverflow.com/questions/30538878/datatables-v1-10-sorting -by-hidden-column) – markpsmith

ответ

0

Порядок сортировки правильный, поскольку вы изначально его показываете. Столбец содержит строку и порядок сортировки основан на значении ASCII различных строк в столбце.

Что вы хотите, это сортировка порядка цифр. Однако, если столбец, когда вы его показываете, содержит числовые значения, вы получите результаты деления. Наверное, не то, что вы хотите!

Вы можете сортировать на скрытом столбце, как @markpsmith предложили или вы можете также исследовать используя DataTables сортировочных плагин с или без определения типа:

Ссылка:

Sorting Plugins

1

Как уже упоминалось , проблема в том, что datatables использует сортировку строк из-за косой черты.

Способ, которым я обойду это, добавив скрытый диапазон с числовым значением. Вы просто должны помнить, чтобы сделать все значения одинаковой длины, так как они все равно будут отсортированы как строки. Вы можете сделать это, добавив 0.

Пример [предполагая, я знаю, что мой номер никогда не будет более чем 100]:

<td><span style="display:none">024</span>24/60</td> 
... 
<td><span style="display:none">001</span>1/60</td> 
... 
<td><span style="display:none">051</span>51/60</td> 
... 
<td><span style="display:none">033</span>33/60</td> 

Восходящая сортировка, даже в виде строки, приведет к 1, 24, 33, 51

Вы можете использовать этот трюк, если добавить слова после номера:

<td><span style="display:none">050</span>50 Hours</td> 
+0

очень интересно. Я буду заинтересован в том, если она может быть использована для даты сортировки строк, а в том числе метаданные о дате (делать что-то вроде YYYY/MM/DD MM/DD/YY таким образом и таким образом – charley

Смежные вопросы