2013-03-29 2 views
0

Я использую jQuery для полосы зебры моей таблицы, потому что она работает для ie8.Zebra striping после jQuery remove()

$('table.data tr:nth-child(odd)').css('background-color', '#ececec');

Проблема, у меня есть кнопка, которая позволяет удалить строку.

$(this).parents('tr').remove();

Какие скидывает зебры. Так что я пробовал:

$(this).parents('tr').remove(); 
$('table.data tr:nth-child(odd)').css('background-color', '#ececec'); 
$('table.data tr:nth-child(even)').css('background-color', '#ffffff'); 

И

$(this).parents('tr').remove(); 
$('table.data tr').css('background-color', '#ffffff'); 
$('table.data tr:nth-child(odd)').css('background-color', '#ececec'); 

Ни один из которых работают. .remove() не имеет функции обратного вызова, или я бы поместил в него полосу зебры. Есть идеи?

Редактировать - код, указанный выше, работает, но возник конфликт css. (См. Ответ ниже). Однако конфликт не устанавливает цвет фона. Поэтому мне все равно хотелось бы знать, почему правило вызывает конфликт.

+1

Ваш первый пример работает для меня: [Full Screen] (http://jsfiddle.net/johnkoer/cN8Hb/1/embedded/result/) + [Код] (http://jsfiddle.net/johnkoer/cN8Hb/1/light/) –

+0

Хмммммм ... спасибо. – inorganik

+1

Почему бы не просто: '$ ('table.data tr: odd'). Css ('background-color', '#ececec'); $ ('table.data tr: even'). Css ('background-color', '#ffffff'); 'удаление nth-child? –

ответ

1

.remove не требует обратного вызова, поскольку он является синхронным. Я бы предложил отказаться от .css и использовать класс, чтобы вы могли просто удалить класс, а затем добавить его обратно в нечетные строки.

сделать начальное чередование:

$('table.data tr:nth-child(odd)').addClass('odd'); 

, а затем на REMOVE:

$(this).parents('tr').remove(); 
$('table.data tr').removeClass('odd').filter(':nth-child(odd)').addClass('odd'); 
+0

Почему оригинал терпит неудачу? –

+1

@JanDvorak Мое предположение было бы конфликтом css, но я не могу подтвердить это без html/css. Его оригинальный код будет работать с правильным html/css. Я предполагаю, что это действительно должен быть комментарий, но здесь есть немного кода, он не будет очень читабельным в качестве комментария. –

+0

Не знаю ... жаль беспокоить всех. У меня нет конфликтов css, мне нужно будет устранять неполадки. – inorganik

1

Если вы ориентируетесь достаточно современный браузер (IE 9+), вы можете использовать CSS3 стилей для обработки все это.

style.css:

table.data tr:nth-child(odd) 
{ 
    background-color: #ececec; 
} 
table.data tr:nth-child(even) 
{ 
    background-color: #ffffff; 
} 

Нет Javascript необходим; эти правила применяются браузером и автоматически применяются при изменении DOM.

+1

* «Я использую jQuery для zebra-stripe my table, потому что он работает для ie8». * Хотя я согласен, должен использовать CSS3 и только деградировать в js для браузеров, которые его не поддерживают. –

+0

@ KevinB хе, да, может быть, я должен прочитать первую строчку вопроса. Тем не менее это может оказаться полезным для других, которые приходят к этому вопросу. – tcovo

+0

@KevinB Если вы уже включили js в полосу зебры, зачем вам тратить лишние строки css на то же самое? – inorganik

0

Обнаружена проблема.

Код в моем вопросе работает, но возник конфликт css. Как ни странно, хотя, правило CSS, которое было причиной конфликта не установлен background-color

table.headerShadow tr:nth-child(2) { 
    background-image:url(../_images/faux-shadow.png); 
    background-repeat:repeat-x; 
} 

Удаление правила исправляет эту проблему. Странно, а? Почему это правило вызывает конфликт?

Вот скрипку, чтобы продемонстрировать: http://jsfiddle.net/W7yZC/2/

+1

Я не совсем понимаю, почему это вызывает проблему, но ее относительно легко исправить. Добавьте thead и tbody к вашему столу и настройте это правило css только на thead. http://jsfiddle.net/W7yZC/4/ Было бы также разумно, чтобы этот пункт нацелился на js только на tbody. –

Смежные вопросы