Autor Zpráva
Joseph7
Profil *
zdravim

na strake pouzivam na tabulkovy riadkovy efekt nasledujuci kod.
Pri niektorych tabulkach ale vyuzivam php funkciu cycle s hodnotami odd a even pre <tr class="odd alebo even">

Ako by som mal upravit nizsie uvedeny JQUERY kod aby pridalo riadku tr class odd alebo even iba vtedy ked riadok tr este nema class odd alebo even?


$("table.effect tbody tr td")
  .parent("tr:nth-child(odd)")
  .addClass("odd")
  .end()
  .parent("tr:nth-child(even)")
  .addClass("even");
Joseph7
Profil *
jeto takto spravne?

$("table tbody tr td")
  .parent("tr:nth-child(odd):not('.odd')")
  .addClass("odd")
  .end()
  .parent("tr:nth-child(even):not('.even')")
  .addClass("even");
Joseph7
Profil *
mam dve riesenia len neviem ktore je spravne, mohol by sa mi k tomu vyjadrit nejaky jquery znalec?

1. riesenie
$("table tbody tr td")
  .parent("tr:nth-child(odd)")
  .not('.odd')
  .addClass("odd")
  .end()
  .parent("tr:nth-child(even)")
  .not('.even')
  .addClass("even");


2. riesenie
$("table tbody tr td")
.parent("tr:nth-child(odd):not(.odd)")
.addClass("odd")
.end()
.parent("tr:nth-child(even):not(.even)")
.addClass("even"); 
preca1
Profil
Zdravim,
jQuery znalec nejsem, ale oba kódy sou docela odporný (nemam rád řetězení volání metod) a snad existuje elegantnější řešení. Z tvýho zadání mě napadá následující postup:
1) vzít všechny tr elementy (ne td, jak to děláš ty),
2) projet je a u každýho zjistit, jestli splňuje nějakou podmínku,
3) něco s nim případně udělat, na základě 2).
Joseph7
Profil *
zdravim

1) to td je preto tak ked sa v tbody vyskytuje tr s th aby mu nedavalo odd alebo even
2) a 3) rad by som to tak spravil ale musim vychadzat z mojich schopnosti a vedomosti, vzane je ten kod taky zly?
Amunak
Profil
Pokud vám nevadí špatná podpora v IE (nefunguje do IE8 včetně), stačí použít CSS:
tr:nth-child(even) {
    background-color: #000000;
}

nebo můžete použít tento javascript (pokud už tam jinak jQuery máte):
$(document).ready(function()
{
  $("tr:even").css("background-color", "#000000");
});

Doporučil bych ale spíš první variantu.

Zdroj: http://stackoverflow.com/questions/3084261/alternate-table-row-color-by-css
Kcko
Profil
Amunak:
Nebo si stáhnout selectivirz, JS knihovnu která to podporuje a doplní (umí i jiné složitější selectory).
Chamurappi
Profil
Reaguji na Josepha7:
Proč negeneruješ třídy odd a even rovnou na straně serveru? Proč by statickou věc mělo řešit něco na straně prohlížeče? Nebo ta tabulka vzniká také nějak dynamicky?

to td je preto tak ked sa v tbody vyskytuje tr s th aby mu nedavalo odd alebo even
Nadpisové buňky můžeš dát do <thead> (pokud jsou v tabulce nahoře).

vzane je ten kod taky zly?
Zvolený způsob zápisu je přinejmenším kontroverzní (rozebírali jsme ho tu společně s jinou konvencí).


Reaguji na Amunaka:
Pokud vám nevadí špatná podpora v IE (nefunguje do IE8 včetně), stačí použít CSS
Kdyby věděl, že počet řádků nepřesáhne určitou mez, může použít selektor následujícího sourozence, který funguje i v Exploreru 7:
tr:first-child+*, tr:first-child+*+*+*, tr:first-child+*+*+*+*+* {
  background-color: #000000;
}
Joseph7
Profil *
Proč negeneruješ třídy odd a even rovnou na straně serveru? Proč by statickou věc mělo řešit něco na straně prohlížeče? Nebo ta tabulka vzniká také nějak dynamicky?

praveze ja ich generujem na strane servera ale len pre tabulky ktore su generovane, niektore tabulky na stranke su aj staticke a tym chcem pridat odd even a zaroven aby odd a even nepridavalo znova tej tabulke ktora to uz ma triedy odd alebo even vygenerovane na serveri



Nadpisové buňky můžeš dát do <thead> (pokud jsou v tabulce nahoře).

samozrejme ich do thead davam ale niekedy ich pouzijem aj v tbody
Amunak
Profil
Chamurappi:
Kdyby věděl, že počet řádků nepřesáhne určitou mez, může použít selektor následujícího sourozence, který funguje i v Exploreru 7:
Otázka je, jestli je střídavé podbarvení řádků v tabulce dost zásadní na to, aby bylo třeba řešit nekompatibilitu ve starších IE. Kdyby znal (neměnnou) výšku řádku, může použít třeba také opakované pozadí.
Joker
Profil
Joseph7:
Podobně jako Chamurappi bych raději generoval CSS třídy už na serveru, pokud to jde.

Ale jinak to jde udělat poměrně nekomplikovaným JS třeba viz zde:
function stripeTable(t) {
   var i, odd = true;
   for (i=0; i<t.rows.length; i++) {
      t.rows[i].className += odd ? ' odd' : ' even';
      odd = !odd;
    }
}
Kde t je objekt té tabulky, vzešlý třeba z document.getElementById("id tabulky");

A ještě poznámka, často k odlišení řádků stačí jen jedna CSS třída, sudé/liché řádky by měly obecný styl pro řádek tabulky a liché/sudé CSS třídu.
Pak by to mohlo být třeba:
function stripeTable(t) {
   for (var i = 0; i < t.rows.length; i = i + 2) t.rows[i].className += ' even';
}
DJ Miky
Profil
Amunak:
Kdyby znal (neměnnou) výšku řádku, může použít třeba také opakované pozadí.

Tohle řešení bych nedoporučil, protože se velmi snadno rozbije. Např. stačí mít v prohlížeči zoomovat stránku (nyní už prohlížeče zvětšují i obrázky/pozadí, ale není to na pixely přesně a navíc se velký text může zalomit na další řádek), nastavit si jinou velikost písma / zvětšit písmo, mít v systému jinak široké písmo, které může způsobit zalomení na další řádek, mít mobilní prohlížeč zalamující řádky, a mnoho dalších věcí.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: