このポストjQueryテーブルソート(githubリンク:https ://github.com/padolsey/jQuery-Plugins/blob/master/sortElements/jquery.sortElements.js )に続いて、列を正常にソートしていますが、行スパンの場合:例えばこんな場合
Grape 3,096,671M
1,642,721M
Apple 2,602,750M
3,122,020M
2 番目の列をクリックすると、並べ替えが試行されます
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>