Nie, nie trzeba stosować .each()
. Załatwia sprawę, ale lepiej -- wygodniej, zwięźlej i szybciej -- jest zrobić coś innego.
Selektory :even
i :odd
to rozszerzenia jQuery. CSS nie ma takich selektorów. Przez to selektory te chodzą w nowoczesnych przeglądarkach wolniej niż zwykłe, CSS-owe, które można przekazać do natywnej metody przeglądarek querySelectorAll()
.
Dodatkowo, selektory :even
i :odd
, podobnie jak wiele innych rozszerzeń selektorów z jQuery, działają na całej aktualnej kolekcji jQuery. Tj. najpierw budują JEDNĄ listę (kolekcję) elementów td
we wszystkich tabelach produktu na stronie, a potem wybierają te TD-ki, które są nieparzyste lub parzyste. Wszystko to masz opisane w dokumentacji jQuery: http://api.jquery.com/even-selector/ (jeśli używasz jQuery, musisz się nauczyć korzystać z tej dokumentacji -- to absolutny mus)
My chcemy osiągnąć inny efekt. Chcemy wybrać kolumny w tabelach. Czyli te elementy TD, które są parzystymi lub nieparzystymi potomkami elementów TR, czyli wierszy tabeli (ten szczegół o TR-ach nie jest ważny, bo TD zawsze siedzi w TR). Od czegoś takiego mamy selektor :nth-child
. Jest zdefiniowany w CSS3 ( http://www.w3.org/TR/css3-selectors/#nth-child-pseudo ), a więc jest standardowy i szybki w nowoczesnych przeglądarkach. Dokumentacja jQuery też o nim wspomina: http://api.jquery.com/nth-child-selector/ .
W tym przypadku, nieparzyste komórki w danym wierszu wybrałbyś za pomocą selektora table.tabela_produktu td:nth-child(odd)
, a parzyste za pomocą table.tabela_produktu td:nth-child(even)
. Wprowadzając te selektory do Twojego oryginalnego kodu sprawisz, że będzie on działał zgodnie z Twoimi oczekiwaniami.
Tak swoją drogą, na Twoim miejscu w ogóle nie używałbym jQuery do osiągnięcia takiego efektu. Style lepiej nadawać w... arkuszu stylów, czyli w pliku CSS. Jeśli chciałbym wspierać przeglądarki, które nie obsługują pseudoklasy :nth-child
, to w jQuery dodałbym co najwyżej zwykłą klasę even
i odd
. Rozdzielajmy warstwy. Niech JavaScript będzie od zachowania, a prezentację trzymajmy w CSS.