2013-02-19 3 views
3

Я использую плагин jQuery tablesorter, и я хотел бы сделать мою таблицу более читаемой, используя разделитель запятой на тысячах, то есть число_формат ($ value, 0, "", ",");jQuery tablesorter с number_format();

Однако это нарушает сортировку. Я искал решение (например, http://lab.christianmontoya.com/jquery-tablesort-numbers-commas/), но мне не удалось его настроить и разместить мой стол. Я новичок в написании сценариев, поэтому, пожалуйста, будьте снисходительны.

Каким должен быть мой блок javascript?

<head> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myTable").tablesorter({ 
      sortList: [[1,1], [2,1]], 
      widgets: ['zebra'], 
     }); 
    }); 
</script> 
</head> 


<body> 
<table id="myTable" class="tablesorter"> 
<thead> 
<tr> 
<th>Username</th> 
<th>Level</th> 
<th>Experience</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td>Fiery</td> 
<td><?php echo number_format(2400, 0, " ", ","); ?></td> 
<td><?php echo number_format(378433689, 0, " ", ",");?></td> 
</tr> 
<tr> 
<td>Sixten</td> 
<td><?php echo number_format(1600, 0, " ", ","); ?></td> 
<td><?php echo number_format(1000000000, 0, " ", ",");?></td> 
</tr> 
<tr>      
<td>Penny</td> 
<td><?php echo number_format(885, 0, " ", ","); ?></td> 
<td><?php echo number_format(8900002, 0, " ", ","); ?></td> 
</tr> 
<tr> 
<td>Petra</td> 
<td><?php echo number_format(2400, 0, " ", ","); ?></td> 
<td><?php echo number_format(398433889, 0, " ", ","); ?></td> 
</tr> 
<tr> 
<td>Neu</td> 
<td><?php echo number_format(4974, 0, " ", ","); ?></td> 
<td><?php echo number_format(198433889, 0, " ", ","); ?></td> 
</tr> 
</tbody> 
</table> 
</body> 

ответ

4

Вы должны применить пользовательский формат заголовка/колонки вы хотите:

Markup:

<table id="myTable" class="tablesorter" border="0" cellpadding="0" cellspacing="1"> 
     <thead> 
      <tr> 
       <th> 
        Price 
       </th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       <td> 
        1,000.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        100,100.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        100,980.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        100,122.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        120,122.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        540,122.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        222,122.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        100,020.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        100,251.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        100,364.00 
       </td> 
      </tr> 
      <tr> 
       <td> 
        300,122.00 
       </td> 
      </tr> 
     </tbody> 
    </table> 

JQuery:

$(document).ready(function() { 
     jQuery.tablesorter.addParser({ 
      id: "fancyNumber", 
      is: function (s) { 
       return /^[0-9]?[0-9,\.]*$/.test(s); 
      }, 
      format: function (s) { 
       return jQuery.tablesorter.formatFloat(s.replace(/,/g, '')); 
      }, 
      type: "numeric" 
     }); 

     $("#myTable").tablesorter({ 
      headers: { 0: { sorter: 'fancyNumber'} }, 
      widgets: ['zebra'] 
     }); 
    }); 

JSFiddle: http://jsfiddle.net/eAgDC/

+0

Спасибо за быстрый ответ. Тем не менее, одна проблема остается. Он сортирует числа по первому разделителю, например. 1 000 000 000 как 1, тогда как в моей таблице это должно быть миллиард. Есть ли обходной путь для этого? – user2088382

+0

Вы должны показать мне, что вы имеете в виду. Создайте jsFiddle, чтобы я мог его увидеть. –

+0

Я не уверен, как показать вам, что я имею в виду в коде. Я не хочу, чтобы разделители запятой оказывали какое-либо влияние на оценку числа. Например. Я хочу, чтобы «2400» оценивалось (и сортировалось) как «2400» (как будто не было разделителя). Сейчас 2,400 сортируются как «2,4». Вы понимаете, что я имею в виду? – user2088382