Вам нужно переключить информацию о направление сортировки по нажатой кнопке или ссылке,
Например. Хранить направление сортировки внутри атрибута данных, как data-sort-direction
, который принимает значения asc
и desc
или 0
для восходящего рода и 1
для нисходящех типа сортировки.
Итак, нажмите вы извлекаете это значение атрибута и вы сортировать элементы в соответствии с текущим значением asc
или desc
, 0
или 1
, а затем использовать его в .sort() метод, чтобы решить, нужно ли вернуться 1
, -1
или 0
if (an > bn) {
return sortDirection === "asc" ? 1 : -1;
}
if (an < bn) {
return sortDirection ==="asc" ? -1 : 1;
}
return 0;
HTML
<button class="id" data-sort-direction="asc">Sort</button>
<table id="sort" class="table">
<tr data-name="John Doe">
<td>Mr. John Doe</td>
</tr>
<tr data-name="Trent Richardson">
<td>Mr. Trent Richardson</td>
</tr>
<tr data-name="Cindy Smith">
<td>Ms. Cindy Smith</td>
</tr>
<tr data-name="Bill Williams">
<td>Mr. Bill Williams</td>
</tr>
<tr data-name="Jane Doe">
<td>Mrs. Jane Doe</td>
</tr>
</table>
JS
var mylist = $('#sort'),
listitems = mylist.children('tbody').children('tr');
$('.id').on('click', function (e) {
var button = $(this),sortDirection = button.data('sort-direction');
// update data attribute for the next click
sortDirection === "asc"?button.data('sort-direction', "desc"):button.data('sort-direction', "asc");
listitems.sort(function (a, b) {
var an = a.getAttribute('data-name'),
bn = b.getAttribute('data-name');
if (an > bn) {
return sortDirection === "asc"?1:-1;
}
if (an < bn) {
return sortDirection ==="asc"?-1:1;
}
return 0;
});
listitems.detach().appendTo(mylist);
});
Будьте осторожны при извлечении <tr>
элементов из <table>
тега, есть неявное <tbody>
, даже если опустить его в HTML, так что вы должны получить <tr>
вещи таким образом:
listitems = mylist.children('tbody').children('tr');
Fiddle with <tr>
Fiddle with <div>
Вы сравниваете 'compB' с собой во втором возвратном заявлении – JLewkovich
Ваше' if condition' не имеет смысла –