在这篇文章jQuery 表排序(github 链接:https ://github.com/padolsey/jQuery-Plugins/blob/master/sortElements/jquery.sortElements.js )之后,我成功地对列进行了排序,但是它在rowspan 的情况:例如这样的情况
Grape 3,096,671M
1,642,721M
Apple 2,602,750M
3,122,020M
当我单击第二列时,它会尝试排序
Apple 2,602,750M
1,642,721M
Grape 3,096,671M
3,122,020M
(预期的结果应该是它应该只在每个行跨度内排序
Grape 1,642,721M
3,096,671M
Apple 2,602,750M
3,122,020M
或者
Grape 3,096,671M
1,642,721M
Apple 3,122,020M
2,602,750M
)
因此,如您所见,其中任何一个都不正确,请任何 jQuery 大师帮我解决这个问题。这是我的代码
var inverse = false;
function sortColumn(index){
index = index + 1;
var table = jQuery('#resultsTable');
table.find('td').filter(function(){
return jQuery(this).index() == index;
}).sortElements(function(a, b){
a = convertToNum($(a).text());
b = convertToNum($(b).text());
return (
isNaN(a) || isNaN(b) ?
a > b : +a > +b
) ?
inverse ? -1 : 1 :
inverse ? 1 : -1;
},function(){
return this.parentNode;
});
inverse = !inverse;
}
function convertToNum(str){
if(isNaN(str)){
var holder = "";
for(i=0; i<str.length; i++){
if(!isNaN(str.charAt(i))){
holder += str.charAt(i);
}
}
return holder;
}else{
return str;
}
}
问题:
1.如何使用rowspan对此进行排序。ROWSPAN 的数量并不总是相同的。上面的例子 Grape 和 Apple 的行跨度都是 2,但情况并非总是如此。
2.任何人都可以解释这个语法:
return (
isNaN(a) || isNaN(b) ?
a > b : +a > +b
) ?
inverse ? -1 : 1 :
inverse ? 1 : -1;
所以我可以看到,如果 a 或 b 不是数字,则进行字符串比较,否则进行数字比较,但我不明白
inverse ? -1 : 1 :
inverse ? 1 : -1;
测试用例
<table id="resultsTable">
<thead>
<tr>
<th>Fruit</th>
<th onclick="sortColumn(1)">Quantity</th>
<th onclick="sortColumn(2)">Rate</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="4">Grape</td>
<td>15</td>
<td>5</td>
</tr>
<tr>
<td>4</td>
<td>2</td>
</tr>
<tr>
<td>88</td>
<td>1</td>
</tr>
<tr>
<td>11</td>
<td>3</td>
</tr>
<tr>
<td rowspan="3">Melon</td>
<td>21</td>
<td>2</td>
</tr>
<tr>
<td>2</td>
<td>0</td>
</tr>
<tr>
<td>35</td>
<td>1</td>
</tr>
<tr>
<td rowspan="6">Melon</td>
<td>24</td>
<td>5</td>
</tr>
<tr>
<td>66</td>
<td>2</td>
</tr>
<tr>
<td>100</td>
<td>4</td>
</tr>
<tr>
<td>21</td>
<td>1</td>
</tr>
<tr>
<td>65</td>
<td>3</td>
</tr>
<tr>
<td>2</td>
<td>0</td>
</tr>
</tbody>
<table>