następstwie tego postu (link github: https://github.com/padolsey/jQuery-Plugins/blob/master/sortElements/jquery.sortElements.js) jQuery table sort, ja z powodzeniem sortować kolumny, jednak to nie działa w przypadku rowspan: Na przykład przypadek jak tenjQuery sortColumns: Jak sortować poprawnie rowspan
Grape 3,096,671M
1,642,721M
Apple 2,602,750M
3,122,020M
Kiedy klikam na drugiej kolumnie, to starają się uporządkować
Apple 2,602,750M
1,642,721M
Grape 3,096,671M
3,122,020M
(oczekiwany wynik powinien być, że powinien tylko porządek w obrębie każdej rowspan
Grape 1,642,721M
3,096,671M
Apple 2,602,750M
3,122,020M
lub
Grape 3,096,671M
1,642,721M
Apple 3,122,020M
2,602,750M
)
więc albo które jak widać nie jest poprawny, proszę każdy guru jQuery pomóc mi rozwiązać ten problem. Oto mój kod
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;
}
}
Pytanie:
1.How mogę rozwiązać ten z rowspan. LICZBA ROWSPAN NIE ZAWSZE JEST TA SAMEGO. Powyższy przykład zarówno Grape, jak i Apple mają rozpiętość rzędu 2, ale nie zawsze tak jest.
2.Can każdy wyjaśnić tę składnię:
return (
isNaN(a) || isNaN(b) ?
a > b : +a > +b
) ?
inverse ? -1 : 1 :
inverse ? 1 : -1;
Więc widzę, że jeśli A lub B nie jest liczbą, a następnie zrobić porównanie ciąg inaczej zrobić porównanie liczb, ale nie rozumieją
inverse ? -1 : 1 :
inverse ? 1 : -1;
przypadki testowe
<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>
Jaki jest oczekiwany wynik? –
@ Newbo.O: Powinien sortować tylko w obrębie poszczególnych zakresów. Zaktualizowałem moje pytanie z oczekiwanym wynikiem. –
Sortować tylko w obrębie podziału na wiersze lub: ** sortować każdą grupę podziału wierszy, a następnie sortować grupy według pierwszej wartości **? –