Добавьте зебру, но игнорируйте скрытые элементы
У меня есть следующий код, который фильтрует список в соответствии с тем, какой класс добавляется в элемент li. Полоска зебры работает хорошо, когда отображаются все элементы, но когда вы фильтруете и, скажем, один из элементов списка скрыт, полоса зебры не синхронизируется. Это можно обойти?
Я проверил этот пост, но не работает jQuery Table Zebra Striping со скрытыми строками
Благодарю.
//Filter
$("#local-clubs-list li:visible:even").addClass("even");
$('ul#filter a').click(function() {
$(this).css('outline','none');
$('ul#filter .current').removeClass('current');
$(this).parent().addClass('current');
var filterVal = $(this).text().toLowerCase().replace(' ','-');
$('ul#local-clubs-list li').each(function() {
if(!$(this).hasClass(filterVal)) {
$(this).fadeOut('normal').addClass('hidden');
} else {
$(this).fadeIn('slow').removeClass('hidden');
}
$("#local-clubs-list li").removeClass("even");
$("#local-clubs-list li:visible:nth-child(even)").addClass("even");
});
return false;
});
$('ul#filter a:eq(0)').trigger('click');
То, что я вижу в firbug
<li class="northern even">
<li class="northern">
<li class="north-dublin hidden even" style="display: none;">
<li class="northern">
<li class="northern even">
<li class="northern">
<li class="northern even">
<li class="northern">
<li class="northern even">
3 ответа
По некоторым причинам скрытый не работает хорошо, и мне пришлось добавлять и удалять классы. Вот кодекс, который работает.
//Filter
function zebraRows(selector, className)
{
$(selector).removeClass(className).addClass(className);
}
$('#local-clubs-list li').addClass('visible');
$('ul#filter a').click(function() {
$(this).css('outline','none');
$('ul#filter .current').removeClass('current');
$(this).parent().addClass('current');
var filterVal = $(this).text().toLowerCase().replace(' ','-');
$('ul#local-clubs-list li').each(function() {
if(!$(this).hasClass(filterVal)) {
$(this).fadeOut('normal').addClass('hidden');
$(this).fadeOut('normal').removeClass('visible');
} else {
$(this).fadeIn('slow').removeClass('hidden');
}
});
$('#local-clubs-list li').removeClass('even');
zebraRows('#local-clubs-list .visible:even', 'even');
$('#local-clubs-list li').addClass('visible');
return false;
});
$('ul#filter a:eq(0)').trigger('click');
Я также использую таблицы данных. Люблю это, и Аллан покачнулся, но я не использую добавленные классы для "полос зебры"
Если ваши пользователи прошли IE8, вы можете просто позволить CSS сделать это так:
tr:nth-child(even) {
background-color: #000;
}
tr:nth-child(odd) {
background-color: #FFF;
}
Вы должны удалить even
класс, а затем добавить этот класс снова внутри вашей функции фильтра.
Так что-то вроде
$('ul#local-clubs-list li').each(function() {
if(!$(this).hasClass(filterVal)) {
$(this).fadeOut('normal').addClass('hidden');
} else {
$(this).fadeIn('slow').removeClass('hidden');
}
$("#local-clubs-list li").removeClass("even");
$("#local-clubs-list li:nth-child(even)").addClass("even");
});