Плагин jquery tablesorter - сохранить альтернативные цвета строк
Я взял таблицу html, в которой я применяю альтернативные цвета строк, и я добавил сортировщик таблицы jquery, чтобы пользователи могли сортировать таблицу.
Проблема в том, что альтернативные цвета строк теперь перепутаны как (на основе сортировки) есть несколько строк с тем же цветом фона.
Есть ли способ reset альтернативного цвета строки с сортировщиком таблицы jquery?
Ответы
Ответ 1
В уже созданном по умолчанию виджет zebra
, встроенный в ядро, который применяет классы odd
и even
для чередования строк. Он работает независимо от того, добавили ли вы class=even/odd
в html файл.
Это очень легко настроить. Я просто выполнил инструкции на веб-сайт сортировщика таблиц, а затем изменил функцию готовности документа к следующему:
<script type="text/javascript">
$(document).ready(function()
{
$("#myTable").tablesorter({
widgets: ['zebra']
});
}
);
</script>
Я сделал пример, отвечая на вопрос. Вы можете просмотреть результат в действии или посмотреть пример кода.
Ответ 2
Основанный на ответе Энтони, но перефразированный как однострочный (в основном):
function fixStripes() {
$('table tr').removeClass('odd even')
.filter(':even').addClass('even').end()
.filter(':odd').addClass('odd');
}
$("table").bind("sort", fixStripes);
Вызовы JQuery могут быть "закованы в цепочку", как указано выше, используя операции типа filter()
для ограничения выбранных элементов и от .end()
до "reset" до последнего выбора. Иными словами, каждый .end()
"отменяет" предыдущий .filter()
. Окончательный .end()
не используется, так как после этого делать нечего.
Ответ 3
Чтобы сохранить полоски зебры после сортировки, вам нужно снова вызвать виджет зебры.
$('#myTable')
.tablesorter({ widgets: ['zebra'] })
.bind('sortEnd', function(){
$("#myTable").trigger("applyWidgets");
});
Это меньше взлома, так как вы будете повторно использовать логику виджета зебры, а не реплицировать ее.
Примечание. Этот вид работы требуется только в тех случаях, когда виджет по умолчанию zebra не работает. В большинстве случаев я обнаружил, что этот хак не требуется, так как виджет работает корректно.
Ответ 4
Как насчет:
function fixStripes() {
var i = 0;
var rowclass;
$("table tr").each(function() {
$(this).removeClass("odd even");
rowclass = (i%2 == 1) ? "odd" : "even";
$(this).addClass(rowClass);
});
}
$("table").bind("sort", fixStripes);
О, и если вы хотите действительно простое исправление, вы можете задержать дыхание для этого псевдо-класса CSS, чтобы его подхватили все основные браузеры:
table tr:nth-child(n+1) {
color: #ccc;
}
Но моя догадка основана на том, как FF и компания обрабатывают CSS для динамического HTML, он будет устанавливать ваши полосы нагрузка, но не применять CSS после сортировки. Но я хотел бы знать наверняка.
Ответ 5
Пересмотренное и новейшее рабочее решение - встроенный
* Это также позволит изменить цвет при нажатии. *
<script type="text/javascript">
$(document).ready(function () {
$('#tblLookupResult').tablesorter({ widthFixed: true, sortList: [[0, 0], [0, 1], [0, 2]], theme: 'blue', widgets: ['zebra'] })
.tablesorterPager({ container: $("#pager"), size: $(".pagesize option:selected").val() });
$('#tbltable1 tbody tr').live('click', function () {
if ($(this).hasClass('even')) {
$(this).removeClass('even');
$(this).addClass('ui-selected');
}
else if ($(this).hasClass('odd')) {
$(this).removeClass('odd');
$(this).addClass('ui-selected');
}
else {
$(this).removeClass('ui-selected');
$(".tablesorter").trigger("update");
$(".tablesorter").trigger("applyWidgets");
}
});
});
</script>
Теперь все должно удариться!
Ответ 6
Через ваш css:
table.tablesorter tr:nth-child(even) {
background-color: #ECFAFF;
}