2009-12-29 49 views
2

我的问题涉及到jQuery插件的tablesorter:问题的的tablesorter和jQuery的排序价格与欧元符号

我已经与价格列的排序问题,格式类似:135.35€,149.99€1500 €等

排序只适用于数字,但是当我添加欧元符号,排序不能正常工作。

我有用于第三列这ASC顺序(见下面的代码):

1)1435€

2)190€

3)834€

,你可以看到有什么问题。有人可以告诉我,我应该在这里做什么?

非常感谢你,

弗朗索瓦

的JS:

<script type="text/javascript" id="js"> 
    $(document).ready(function() { 
    $("table").tablesorter({ 
    }); 
}); 
</script> 

的HTML(需要进行排序第3列)

<table class="tablesorter" cellspacing="0" cellpadding="0" border="0">    
<thead> 
<tr> 
<th width="50px">1</th> 
<th width="120px">2</th> 
<th width="280px" >3</th> 
</tr> 
</thead> 
<tbody> 

<tr>  
<td>bla bla bla</td> 
<td>bla bla bla</td> 
<td>834 €</td> 
</tr> 


<tr>  
<td>bla bla bla</td> 
<td>bla bla bla</td> 
<td>1435 €</td> 
</tr> 


<tr>  
<td>bla bla bla</td> 
<td>bla bla bla</td> 
<td>190 €</td> 
</tr> 

    </tbody> 
</table> 

回答

0

它的eems问题是数字被解释为文本,而不是数字。 (由于文本1231234都在2之前,因为12之前。)这可能是因为您在排序的表达式中有€符号。

尝试剥离€,排序,然后再添加€。 (或者,添加一个单独的列,你不允许排序上€,因此,在分类列中的数据是纯粹的数字)。

简易版:

<tr> 
    <td>bla bla</td> 
    <td>bla bla</td> 
    <td>bla bla</td> 
    <td>123</td> 
    <td>&euro;</td> 
</tr> 

注意我使用的是&euro;而不是,只是为了确保浏览器能正确呈现它。

1

问题是,使用欧元符号,它将数据视为字符串而不是数字。所以排序是按字符串而不是数字来完成的。

我的解决方案是从数据中删除欧元符号;然后将一个css类添加到具有数字值的单元格中,该单元格后面会显示欧元符号。

td.currency:after 
{ 
    content: " €"; 
} 
+0

这在所有浏览器上都不支持。 – BalusC 2009-12-29 21:57:53

+0

这要求:正确解释伪类后,即Internet Explorer 6/7可能会遇到问题。 – naivists 2009-12-29 21:57:53

+1

我喜欢这个解决方案,但我宁愿将类名称看作“欧元”(因为可能涉及其他货币),并且用'€'替换€。 – 2009-12-29 21:58:28

0

欧元符号不是使整个值成为字符串的数字。字符串被命令为“111,22,3”,而不是与“Numbers”一样的“3,22,111”。

更好地将欧元符号放在单独的“货币”列中,例如,

<td>1234</td> 
<td>€</td> 

必要时,可以添加colspan="2"到相关<th>表头。

1

更好的选择是在排序前使用tablesorter中的自定义处理程序删除欧元符号。这个方法处理我能看到的HTML代码和非HTML代码。

它在页面

$("#tableSorterTable").tablesorter({ 
    // Define a custom function to ignore the euro 
    textExtraction: function(node) { 
     return node.innerHTML.replace(\'\u20AC\', ""); 
    } 
});