jQuery нечетные / четные селекторы для нескольких элементов - PullRequest
8 голосов
/ 25 октября 2009

Я использую следующий код для удаления нескольких таблиц на одной странице:

    $(".events-table tr:even").css("background-color", "#fff");
$(".events-table tr:odd").css("background-color", "#efefef");

Это работает просто отлично, но четные / нечетные интервалы применяются к каждой таблице на странице. Я бы хотел, чтобы каждая таблица имела одинаковый шаблон. Это означает, что каждая таблица должна начинаться с одного цвета в первой строке, а затем во второй строке для каждой таблицы на странице.

Есть предложения?

Thx!

Ответы [ 6 ]

12 голосов
/ 25 октября 2009

вы, вероятно, можете использовать селектор для таблицы, а затем найти строки для цвета, то есть:

$(".events-table").each(function()
{
    $(this).find("tr:even").css("background-color", "#fff");
    $(this).find("tr:odd").css("background-color", "#efefef");
});
6 голосов
/ 25 октября 2009

Используйте :nth-child() (:nth-child(odd) и :nth-child(even)) вместо :odd или :even

$("table.events-table tr:nth-child(even)").css("background-color", "#fff");
$("table.events-table tr:nth-child(odd)").css("background-color", "#efefef");

:odd и :even на самом деле основаны на 0, то есть нечетные строки равны 0,2,4 и т. Д. И наоборот, и используются для получения нечетных и четных совпадений в полном обернутом наборе.

Взгляните на это Рабочее Демо , чтобы продемонстрировать.

nth-child() выполняет выбор на основе родительского элемента.

2 голосов
/ 25 октября 2009

Проблема в том, что селекторы .events-table tr возвращают список tr независимо от того, принадлежат ли они к одной и той же таблице. Селекторы :even и :odd применяются к полному списку.

Если у вас нет невероятно большого количества таблиц, вы можете просто использовать идентификаторы, а не классы.

$("#events-table1 tr:even").css("background-color", "#fff");
$("#events-table1 tr:odd").css("background-color", "#efefef");
$("#events-table2 tr:even").css("background-color", "#fff");
$("#events-table2 tr:odd").css("background-color", "#efefef");
1 голос
/ 18 апреля 2011
$("tr:odd").css("background-color", "#bbbbff");

изменит нечетные строки для всех таблиц на странице, вы можете поставить еще одну для четных

1 голос
/ 25 октября 2009

Селекторы: odd и: even являются специфичными для jQuery «расширениями». Как упомянуто bluenote, они, кажется, работают со списком всех элементов целевого типа (в вашем случае, всех tr в .events-table.

Альтернативы включают в себя:

  • Ограничение селектора контекстом таблицы путем передачи элемента таблицы в качестве второго аргумента $('tr:odd', mytable).css({})

  • Использование «настоящего» селектора css nth-child $('.events-table tr:nth-child(even)').css(), но остерегайтесь проблем совместимости с различными браузерами.

  • Назначение класса «нечетный» или «четный» соответствующим строкам и нацеливание на него явно.

0 голосов
/ 25 октября 2009

Попробуйте добавить идентификаторы в свои таблицы и обновлять CSS по одной таблице за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...