Я отвечаю на свой вопрос здесь ... после нескольких часов проб и ошибок и, читая ответы других, я думаю, что это хорошее решение.Извините, если звучит так, будто я разговариваю сам с собой от второго лица.
Забудьте добавлять отдельные классы ячеек в ячейки.Поскольку стиль каждой ячейки зависит от местоположения, вы хотите, чтобы стиль изменился при перемещении td
(несмотря на отдельное содержимое и парадигму контейнера ).И этот CSS намного проще и более удобен в обслуживании.
.table-grid .row-odd .column-odd {/* light */}
.table-grid .row-odd .column-even,
.table-grid .row-even .column-odd {/* medium */}
.table-grid .row-even .column-even {/* dark */}
В jQuery вы должны обязательно «перезапускать» подсчет каждый раз, когда попадаете в новую строку,Если бы вы просто использовали $('tr td:odd')
, то он создал бы массив, содержащий все нечетные td
с в все tr
с, которые продолжались бы по строкам.Вам нужно выбрать нечетное td
s для каждого tr
.
. Способ сделать это - использовать for
-loop на объекте-обертке.,Приведенный ниже JS проходит через объект $('tbody')
(массив, содержащий tbody
s).Затем он создает новый объект jQuery из каждого отдельного tbody
, получает его дочерние элементы (tr
s) с ограничениями нечетного и четного, а затем добавляет классы к этим tr
s.Этот цикл гарантирует, что четность (нечетность и четность) «перезапускается» при каждом tbody
.Если у вас есть несколько tbody
с (в пределах одного или нескольких table
с), первая строка всегда будет иметь одинаковый стиль.
for (var i=0; i<$('.table-grid tbody').size(); i++) {
var jQobj = $($('.table-grid tbody').toArray()[i]);
jQobj.children('tr:even').addClass('row-odd');
jQobj.children('tr:odd').addClass('row-even');
}
Цикл JS ниже делаетто же самое: он выбирает нечетные и четные td
s для каждого tr
, перезапуская четность в каждой строке.Если у вас несколько строк, первая ячейка всегда выглядит одинаково.
for (var i=0; i<$('.table-grid tr').size(); i++) {
var jQobj = $($('.table-grid tr').toArray()[i]);
jQobj.children('td:even').addClass('column-odd');
jQobj.children('td:odd').addClass('column-even');
}
В сторону: вы, вероятно, задаетесь вопросом: «Почему вы добавляете« нечетные »классы к tr:even
и td:even
?»Ну, это потому, что селекторы jQuery :even
и :odd
начинаются с нуля, что означает, что :even
выбирает элементы с индексами 0, 2, 4 и т. Д., Что означает первый, третий, пятый и т. Д. Элементы.Если художник CSS хочет, чтобы первый, третий, пятый элементы имели класс, содержащий слово «нечетный» (что разумно, нет?), То программист JS должен переключить его.