Autor Zpráva
Darker
Profil
Pomocí js umím jen měnit classname a inline styly. Teď by se mi zrovna hodilo měnit takové věci jako
#hlavniTabulka td {...}

a podobné. Umí to jQuerry?
Chamurappi
Profil
Reaguji na Darkera:
Měnit to uvedené … na co? Ať je to, co je to, tipuji, že bude opět stačit změna className.

Umí to jQuerry?
Samotné určitě ne. Ale umí najít všechny elementy vyhovující danému selektoru a nastavit jim CSS vlastnosti do atributu style (viz #3), ale to je neefektivní.
joe
Profil
$('#hlavniTabulka td').css({
'color': 'red',
'background-color': 'white'
});
Witiko
Profil
joe:
K čemu máme třídy, když je tu jQuery, že? Vlastně k čertu s celým CSS, používat ho je pod úroveň moderních stránek.

Jak už zmiňoval Chamurappi, s každým dalším elementem vyhovujícím danému CSS3 query selektoru je Tebou navrhovaný způsob méně vhodný. To už je lepší upravit styleSheets collection, tzn. slovy laika dodefinovat css soubor za běhu. Na to samozřejmě žádný "snadný jQuery oneliner" není, pokud vím.

Doporučená četba: http://www.quirksmode.org/dom/changess.html
Darker
Profil
Načítat ale CSS do stránky za běhu může trvat třeba sekundu. To pak program moc dinamicky nevypadá...
Chamurappi
Profil
Reaguji na Darkera:
Proč bys chtěl načítat nové externí CSS?
Proč nestačí změnit třídu?
Witiko
Profil
Darker:
Z Tvé dinamické odpovědi soudím, že sis výše zmíněný odkaz ani neotevřel? Donahrání css souboru do toku dokumentu je samozřejmě také jedna z možností, tu ale ze zjevných důvodů nemám na mysli.
joe
Profil
Witiko:
K čemu máme třídy, když je tu jQuery, že? Vlastně k čertu s celým CSS, používat ho je pod úroveň moderních stránek.

Jasně a proč to nedělat jednoduše, když to jde složitě, že jo? A vlastně, jQuery obsluhuje jeden (JavaScript programátor), CSS druhý (kodér) a k vyřešení triviálního problému je třeba půl hodiny, ale hlavně že to bude úplně správně a klient zaplatí víc, že?

Chamurappi:
ale to je neefektivní

Z jakého důvodu tak soudíš? Protože se ti to nelíbí?

Ze zdrojovéhé kódu této stránky:
document.getElementById("spamprotirobotum").style.display = "none";

Proč se nenastavuje třída s názvem například hide (když nemáš tak rád tahání CSS do jiných jazyků)?
_es
Profil
joe:
Proč se nenastavuje třída s názvem například hide (když nemáš tak rád tahání CSS do jiných jazyků)?
To je jednorazové použitie na jeden element.

Chamurappi:
„ale to je neefektivní“
>
Z jakého důvodu tak soudíš?
Asi preto, že v [#3] ide, na rozdiel od toho priameho nastavenia css hodnoty display, o (asi) viacnásobné použitie viacerých css vlastností na viacerých elementoch pomocou rôznych interných cyklov v jQuery s mnohonásobným prístupom k DOM a pod. Teda to bude aspoň 100 krát pomalšie a náročnejšie na výkon.
Chamurappi
Profil
Reaguji na joa:
A vlastně, jQuery obsluhuje jeden (JavaScript programátor), CSS druhý (kodér)
Vzhled spadá do práce kodéra. Přeci nebudeme lézt do skriptů pokaždé, když si grafik usmyslí, že chce změnit barvičky. Oddělení struktury, vzhledu a chování má mnohem víc výhod než nevýhod.

ale hlavně že to bude úplně správně a klient zaplatí víc
Podobnou pseudoekonomickou úvahou můžeš hájit jakkoliv blbé řešení.

Z jakého důvodu tak soudíš?
Protože vím, co ten skript dělá, a vím, že nativní postupy uvnitř prohlížeče jsou vždy rychlejší.

Proč se nenastavuje třída s názvem například hide?
Tohle jsem nepsal. Je zbytečné nastavovat dodatečně styly či třídu na element s id="spamprotirobotum", když už nastavujeme třídu js na <html>, ale nechám to takhle, protože jsme na JPW a je to vzorové řešení, k jehož převzetí nejsou zapotřebí žádné znalosti JS či CSS.
Witiko
Profil
joe:
jQuery obsluhuje jeden (JavaScript programátor)
Nemusí jít ani o programátora, ty a spousta dalších příznivců tohoto frameworku jste toho koneckonců živými důkazy.

Z jakého důvodu tak soudíš? Protože se ti to nelíbí?
Nejspíš protože je rozdíl mezi změnou jednoho atributu u jednoho elementu a definice několika vlastností u kolekce, která může čítat i několik stovek elementů. Skutečně nejde o eleganci, ta, jak už jsem říkal, je zcela k ničemu, pokud je samoúčelná. V tomto případě lze skutečně sledovat reálné zpomalení. Oč elegantnější je změnit definici třídy tak, že vzhled veškerých elementů pod touto třídou si prohlížeč změní sám? Případně změnit všem elementům třídu, což sice také není ideální provádět s větším počtem elementů, nicméně alespoň dojde k oddělení kódu a definice stylu.

Jasně a proč to nedělat jednoduše, když to jde složitě, že jo?
Pokud si na to napíšeš / seženeš funkci, stane se tento úkon stejně nebo ještě triviálnější než použití jQuery. Světe div se, ono jQuery pod kapotou taky není nějak "super jednoduché" a také jsi ho musel stahovat, takže argumentace o jednoduchosti je zcela mimo hypotetickou mísu.
To, že si chceš zuby nehty vystačit s jQuery bez toho, aby ses musel nějak hlouběji učit javascript i za cenu nevhodného využívání nabízených prostředků a technologií, je potom už věc jiná.

když nemáš tak rád tahání CSS do jiných jazyků
Čistota kódu je jedna věc a jeho rychlost druhá. Pakliže víme, že budeme na stránce skrývat pouze jeden element na jejím začátku, je tvorba třídy s jednou vlastností skutečně nesmyslná.
Chamurappi
Profil
Reaguji na Witika:
Nebuď na joa ošklivý; chceš ho přesvědčit nebo naštvat? :-)

Oč elegantnější je změnit definici třídy tak
Já bych neměnil definici třídy ve stylopisu (což je krkolomné), nastavil bych třídu společnému rodiči. Rychlé a universální — lze jím vyvolat jakkoliv komplexní jednorázovou změnu stavu.
Škoda, že neexistují parametrické třídy, to by šlo dělat i animace.
Witiko
Profil
Chamurappi:
Nebuď na joa ošklivý
Kdybych na joa chtěl být ošklivý, tak neodpovídám vůbec a nevyvracím mu jeho mylné domněnky. :-) Ve všech tématech, kam píše, obhajuje řešení v jQuery, ať už je jakkoliv nevhodně napsané a kritizuje řešení, která vyžadují větší náhled do problematiky programování v javascriptu, než jakého člověk dosáhne zběžným pohledem do dokumentace jQuery. Navíc vždy argumentuje obchodní stránkou věci, což mi už přijde vůbec nevhodné s ohledem na toto fórum, které se snad snaží jít dál, než k problematice spatlání stránek pro klienta, jenž ani pořádně neví, co chce. Člověk může být líný, neučit se javascript a spokojit se s využíváním základní funkcionality frameworku. Nicméně tvrdit, že řešení v javascriptu bez použití knihovny jQuery je nevhodné / chybné jednoduše z toho důvodu, že daný jazyk neumím a proto musí být složité a tedy logicky k ničemu, to už chce odvahu. Není pak divu, že občas pak mají mé reakce lehce sarkastický nádech.

nastavil bych třídu společnému rodiči
Lákavé, ale obávám se, že v takovém případě skutečně musí být veškeré elementy na jednom místě v toku dokumentu? Pakliže ne, poprosil bych o příklad.

Škoda, že neexistují parametrické třídy, to by šlo dělat i animace.
Vím, že kdysi dávno jsem průhlednost řešil definicí 100 tříd. :) Ohledně té animace - ač dané řešení změny třídy označuješ za krkolomné (a já souhlasím, podpora je velmi různorodá), bylo by i přes technickou náročnost a horší podporu dost možná nejlepším řešení animací u většího počtu elementů. Rozhodně lepším, než např. funkce animate u jQuery, což je ve výsledku podobný mordor, jako [#3] a ve více elementech velice neefektivní.
joe
Profil
Witiko:
Neznamená, že když používám jQuery, že JavaScript neumím. Pravda, na takové úrovni jako Chamurappi nebo ty ho neovládám, ale vše co chci, tak dám dohromady, i když někdy s něčí pomocí. A to, že jsem se jednou zeptal na použití $ ze mě ještě nedělá začátečníka (snad :).

Ve všech tématech, kam píše, obhajuje řešení v jQuery
Já ho zase tolik neobhajuju, naopak chválím weby bez komplexních řešení jako je třeba neustále zmiňovaný jQuery. Poslední dobou ho však používám, protože mi ušetří spoustu času a těch pár vteřin o kolik se to zpozdí díky jeho načítání rád zanedbám, protože běžný uživatel to ani nezaznamená, dá se mluvit o milisekundách. Je jasné, že použití jakého koli frameworku zpomapí o nějaký čas zpracování kódu, ale je zapotřebí to rozebírat? To bysme pak rovnou mohli všichni používat například čisté PHP a pryč s těmi všemi frameworky pro PHP, k čemu jsou, když jsou přece o dost pomalejší než čisté PHP...

Pokud si na to napíšeš / seženeš funkci
Tak na výběr elementu podle id snad není zapotřebí psát nějakou vlastní funkci.

Pakliže víme, že budeme na stránce skrývat pouze jeden element na jejím začátku, je tvorba třídy s jednou vlastností skutečně nesmyslná.
Tím příkladem jsem chtěl jen ukázat, že člověk takové věci raději udělá rychle a šáhne do jednoho souboru, kde napíše jeden řádek, než editovat (zbytečně) dva soubory.

_es:
To je jednorazové použitie na jeden element.
To vidím, to na věci ale nic nemění. Ono se toho zase tolik nestane, když se to provede nad kolekcí. Pomalejší to bude, ano, o pár milisekund. To je hrozné, co? :-)

Chamurappi:
Přeci nebudeme lézt do skriptů pokaždé, když si grafik usmyslí...
To je pravda, ale v některých případech to ani na úrovni CSS zařídit nejde (například změna pozice elementu na určité hodnoty = tj. musím zapsat inline styl, takže pokud přídám i další, nic se neděje).

že nativní postupy uvnitř prohlížeče jsou vždy rychlejší
Jsou, ale zanedbatelně :-)

Tohle jsem nepsal.
To je jedno, kdo to psal. Byla to jen ukázka, náhodně jsem se podíval do kódu, jestli se někde používý JS + CSS. Není to nic, co by se mělo předělávat.

když už nastavujeme třídu js
Koukám, osobně radši odnastavuji třídu nojs. V opačném případě mi přijde, že to musím dělat vše naopak a s odnastvením nojs mi to přijde logičtější :-)

chceš ho přesvědčit nebo naštvat? :-)
Náhodou jsem udělal zkoušku, nic už mě naštvat nemůže....



EDIT: Jinak přiznávám, že kód v #3 je neefektivní. A lepší řešení by bylo nastavení třídy pro tabulku. Jen jsem odpovídal na původní otázku, později však zjistil, že jsem ji ne úplně správně pochopil a neodpovídal k věci.
Witiko
Profil
joe:
Tak na výběr elementu podle id snad není zapotřebí psát nějakou vlastní funkci.
Myslel jsem funkci na změnu kolekce stylů, viz.:
http://www.quirksmode.org/dom/changess.html

než editovat (zbytečně) dva soubory
A že se při tom člověk zapotí. :-)

To je hrozné, co? :-)
Jedná se o chybné využití technologie. Je to, jako bych místo do databáze ukládal informace o registracích uživatelů do jednotlivých textových souborů. U menšího počtu uživatelů by také nebyl rozdíl markantní, ale ze zjevných důvodů se to tak nedělá.

Jsou, ale zanedbatelně :-)
Není tomu tak. Uvědom si, že ke kumulování tohoto časového rozdílu dochází s každým nenativním použitím. U většího počtu elementů mohou rozdíly čítat i mnoho desítek až stovek milisekund a to je ještě markantnější u pomalejších zařízení.

Navíc i pokud je označíš za zanedbatelné, stále je tu faktor praktičnosti. Zkus u rozsáhlého projektu změnit hodnoty stylu, když je máš rozházené po celém scriptu a přiřazované pomocí jQuery, nebylo by to snažší jednoduchou změnou jedné css třídy? Čas nabytý prvotní jednoduchostí řešení je velmi brzo vynahrazen celkovou neohrabaností a problémovostí údržby kódu. Stejně tak pak je kód i přehlednější, dojde-li k oddělení logiky programu a vyobrazení pro pisatele samého. Vím sám jak je "úžasné" vrátit se po pár měsících k neokomentovanému a příšerně napsanému kódu a snažit se ho pochopit. :-)

Náhodou jsem udělal zkoušku, nic už mě naštvat nemůže....
Gratuluji.
Chamurappi
Profil
Reaguji na Witika:
obávám se, že v takovém případě skutečně musí být veškeré elementy na jednom místě v toku dokumentu?
Společným rodičem může být i <html>. Takže pokud má:
#hlavniTabulka td { color: blue; }
… a chce přebarvit všechny výskyty na červeno, může do CSS přidat:
.prebarevno #hlavniTabulka td { color: red; }
… a skriptem přidat třídu prebarevno třeba právě na to <html>.

Není pak divu, že občas pak mají mé reakce lehce sarkastický nádech.
S délkou ovšem ztrácejí na údernosti, osobní výpady jsou zbytečné a netaktické.


Reaguji na joa:
To bysme pak rovnou mohli všichni používat například čisté PHP
Debata o frameworcích je zcela nepřenositelná mezi různými jazyky. Třeba takový .NET Framework je také framework, ale zároveň i přirozená součást prostředí. Jde o to, že nepříliš rozumně navržené jazyky potřebují, aby je někdo další „dodělal“ — otázka je, jak moc je zapotřebí dodělávat JavaScript.

v některých případech to ani na úrovni CSS zařídit nejde (například změna pozice elementu na určité hodnoty)
To jsou spíš vzácné výjimky, většinou se jde opřít o něco obecného (zadat souřadnici v procentech, změnit strukturu DOMu a tím pádem i vztahy pozicování atd.).

> „že nativní postupy uvnitř prohlížeče jsou vždy rychlejší“
> Jsou, ale zanedbatelně :-)
Několikanásobně. To, že uživatel v řadě případů rozdíl nemusí pocítit, je při posuzování algoritmu irelevantní.

Jinak přiznávám, že kód v #3 je neefektivní.
Oproti nativním alternativám bude asi i fungovat jinak, vyskytne-li se v dokumentu více tabulek s id="hlavniTabulka".
Witiko
Profil
Chamurappi:
Společným rodičem může být i <html>. Takže pokud má
Ano, měl jsem chvilkové zatemnění ohledně způsobu, jakým se v css vybírají kolekce elementů z celého dokumentu. :-)

vyskytne-li se v dokumentu více tabulek s id="hlavniTabulka"
To by se snad ale při správném návrhu nemělo stát? Pokud vím, byl atribut ID navržen za účelem vytvoření unikátního označení daného elementu, není důvod dávat stejný IDentifikátor na různé elementy?

osobní výpady jsou zbytečné a netaktické
Což je také důvod, proč se jich snažím vyvarovat. „Nemusí jít ani o programátora...“ musí být bráno v původním kontextu, kdy joe mluvil o JavaScript programátorovi. Soudě dle nedávno založeného topicu, ve kterém projevil neznalost základů JavaScriptu i z místního F.A.Q. jsem se doufám oprávněně domníval, že se zaměřuje spíše na serverové scriptování (v PHP?) a v JavaScriptu skutečně není žádným programátorem, spíš příležitostným uživatelem tohoto jazyka z nutnosti a absence smysluplnějších alternativ v oblasti server-side scriptování. Nebo alespoň do té doby, než objevil jQuery.
joe
Profil
Witiko:
ve kterém projevil neznalost základů JavaScriptu
Neznalost základů JS? Kde prosím tě?

Zkus u rozsáhlého projektu změnit hodnoty stylu, když je máš rozházené po celém scriptu
Ne po celém skriptu, ale právě v té časti, kam patří (vytvářím přes JS overlay, hodnoty pro CSS logicky budou na tom samém místě), což mi přijde daleko logičtější, než to psát do souboru se styly, kde se to v případě vypnutého JS nevyužije. Všechno tak zůstává na jednom místě a je to snadněji dohledatelné, než prozkoumávat skript, zjistit, jaké třídy se nastavují/mění a pak je zase dohledávat v externím souboru se styly.

U většího počtu elementů mohou rozdíly čítat i mnoho desítek až stovek milisekund a to je ještě markantnější u pomalejších zařízení.
A vyzkoušel sis to? To co píšu, si raději předem ověřím a v tomto případě můžu napsat, že nastavení inline stylů pro kolekci se dá prakticky opravdu zanedbat. Taky záleží na počtu měněných elementů, ale to už spadá zase do samotného výpisu, protože asi málokdo bude vypisovat tabulku s desetitisícemi záznamy...

To by se snad ale při správném návrhu nemělo stát? Pokud vím, byl atribut ID navržen za účelem vytvoření unikátního označení daného elementu
Při správném návrhu, při správném návrhu. Přijde mi, že se pořád zajímáš o to, co je to správný návrh, a že vše musí být tak, jak to má být správně. To je sice správný přístup, ne jen tak se říká, že pravidla jsou od toho, aby se porušovala ;-)

Chamurappi:
Debata o frameworcích je zcela nepřenositelná mezi různými jazyky...
Mám za to, že framework slouží k ulehčení práce s již hotovými řešeními. To, že .NET je v případě programování třeba v C# vlastně nutnost je věc jiná :)

To jsou spíš vzácné výjimky, většinou se jde opřít o něco obecného
Nezdá se mi, že by to byly vzácné vyjímky. Nastavovat pozice v procentech? Budu dělat, že jsem to nečetl :-)

Oproti nativním alternativám bude asi i fungovat jinak
Nebude.
Witiko
Profil
joe:
ne jen tak se říká, že pravidla jsou od toho, aby se porušovala ;-)
Nevidím žádnou výhodu z tohoto úžasného porušování pravidel až na nesprávnou funkčnost document.getElementById. Prosím, omluv mou neznalost a ukaž mi nějaký případ, kde je výhodné mít více elementů se stejným ID na jedné stránce.

že nastavení inline stylů pro kolekci se dá prakticky opravdu zanedbat
Záleží na použitém zařízení, použitém prohlížeči (starší ani nepodporují nativní kolekci elementů pomocí funkce document.querySelectorAll), počtu elementů a počtu nastavovaných hodnot, kterými musí cyklus procházet. Máš tu příliš neznámých na to, abys mohl všeobecně deklarovat, že je tento čas zanedbatelný, viz.: Chamurappi.

Kde prosím tě?
Tady.

Budu dělat, že jsem to nečetl :-)
Místo takovýchto výkřiků zkus svou myšlenku rozvést a následně argumentovat, to bude užitečnější.

Nebude.
Bude. jQuery v případě podpory používá namísto svého vyhledávacího engine nativní metodu document.querySelectorAll (Tolik k úrovni abstrakce, kterou tato knihovna poskytuje, mimochodem. Je odkázána na chyby prohlížečů ve vyhledávání elementů). Ta při vyhledávání podle ID navrací vždy pouze jeden element (Stejně jako document.getElementById), takže by došlo ke změně pouze první tabulky s tímto ID. Nevím, jestli jsou pravidla od toho, aby se porušovala, ale nevypadá to, že by JavaScript se zařazením vícero elementů se stejným ID počítal.
joe
Profil
Witiko:

až na nefunkčnost document.getElementById
To přece funguje. V případě více elementů dojde k výběru toho prvního. To automaticky použiju jako příklad, kdybych chtěl například pomocí JS vybrat první element s nějakým id.

Jinak výhoda v tom není. Například někteří kodéři nepoužívají id vůbec, ale vše mají ve třídách.

Záleží na...
Uvažuju případ s tabulkou. A ani kdyby tam byly nějaké překážky, zase tak dlouho to trvat nebude. Z mého pohledu to zanedbatelné je. Teď jsem si to vyzkoušel - i na starším počítači.
A co se týká starých zařízení, záleží spíš pro koho je web určen. Dneska se již používají moderní stroje a je třeba pokročit kupředu. To bysme mohli diskutovat také o tom, že bysme mohli vyvíjet desktopové aplikace třeba na Windows 95...

Tady.
To není neznalost JavaScriptu, ale jQuery. V té době jsem nevěděl, kdy a kde a jaký vrací objekt. A když navíc alert(e) vypíše jen Object nebo něco podobného, je opravdu těžké z toho poznat, o jaký objekt se jedná.

Místo takovýchto výkřiků zkus svou myšlenku rozvést
Já myslel, že to je snad jasné. Díky procentům s nějakým boxem (divem) po pixelech nepohneš, tzn. například v případě nějaké animace bude posun trhaný.

Bude.
Nebude to fungovat jinak. Jak jQuery (na dotaz '#id'), tak i document.getElementById('id'); vrací první nalezený element.
Witiko
Profil
joe:
Nebude to fungovat jinak. Jak jQuery (na dotaz '#id'), tak i document.getElementById('id'); vrací první nalezený element.
Ano, ale definice přes css ovlivní veškeré elementy s daným id, ne jen ten první. Zde je rozdíl mezi definicí v css a prací s JavaScriptem, ačkoliv jak už jsem říkal, není důvod, proč by někdo definoval dva elementy se shodným id - jedná se pak o chybu v návrhu stránky, ne css ani javascriptu, na normální stránce navrátí proto oba postupy shodné výsledky.

Já myslel, že to je snad jasné. Díky procentům s nějakým boxem (divem) po pixelech nepohneš, tzn. například v případě nějaké animace bude posun trhaný.
Odkdy že se bavíme o animaci? On mezi jednorázovou změnou a animací je podstatný rozdíl, navíc pak už je rychlost změn v css pomocí přímé změny stylů ze scriptu často skutečně nedostačující, jak jsi sám poznal.

a je třeba pokročit kupředu
Vyšší výpočetní výkon není omluvou k psaní neefektivních algorytmů, když to jde psát i jinak. Chamurappi to shrnul dobře.

To přece funguje. V případě více elementů dojde k výběru toho prvního.
Přesně tak, což znamená, že definice více elementů s tím samým ID je nejen proti konvencím a pravidlům, jak ty říkáš, ale ještě k tomu zcela nevyužitelná, protože další elementy se shodným ID nelze standardními DOM metodami dohledat.
Abys pochopil - Když jsi říkal „ne jen tak se říká, že pravidla jsou od toho, aby se porušovala ;-)“, myslel jsem, že tak činíš protože znáš nějaký skutečný důvod, proč daná pravidla porušovat.

Například někteří kodéři nepoužívají id vůbec, ale vše mají ve třídách.
Což taky není právě košer, protože nativní podpora jak document.getElementsByClassName tak document.querySelectorAll je poměrně čerstvá a funkce, která dodává vyhledávání podle třídy prohlížečům bez podpory není zrovna dvakrát svižná.

to, že jsem se jednou zeptal na použití $ ze mě ještě nedělá začátečníka (snad :)
Toho jsem si ani nevšímal, spíše jsem postřehnul neschopnost pracovat s konzolí a překvapenost z toho, že v JavaScriptu existují anonymní funkce. Ale nechytěj mě za slovo, to byl jen můj dojem. Nemusí to znamenat, že nejsi programátor teď, ani to, že se jím nemůžeš stát, neznamená to totiž vůbec nic. ;-)
Chamurappi
Profil
Reaguji na Witika:
není důvod dávat stejný IDentifikátor na různé elementy?
Jen do té doby, než se nějaký neočekávaný důvod zjeví :-)

Ta při vyhledávání podle ID navrací vždy pouze jeden element (Stejně jako document.getElementById), takže by došlo ke změně pouze první tabulky s tímto ID.
To není pravda. Je napojená přímo na skutečný vyhodnocovač CSS selektorů a z pohledu CSS vyhovují všechny elementy s daným ID.


Reaguji na joa:
mi přijde daleko logičtější, než to psát do souboru se styly, kde se to v případě vypnutého JS nevyužije
Pokud je stylů pro skriptem řízené věci víc a jsou nezávislé na zbytku stylů, je na místě přidat skriptem zapínaný stylopis.

ne jen tak se říká, že pravidla jsou od toho, aby se porušovala ;-)
Při správném návrhu je porušování pravidel bezpečnější :-)

> „Oproti nativním alternativám bude asi i fungovat jinak“
> Nebude.
Nativní alternativou myslím přepnutí třídy rodiče nebo přímou změnu pravidla ve stylopisu. Bude to fungovat jinak. Ba co víc, může to fungovat jinak v různých prohlížečích. Mějme dvě tabulky se stejným id="hlavniTabulka". Následující stylopis se aplikuje na obě tabulky stejně ve všech prohlížečích:
#hlavniTabulka { color: red }
#hlavniTabulka td { color: blue }
Zatímco následující jQuery skript povede k rozmanitějším výsledkům:
$("#hlavniTabulka").css({ color: red });
$("#hlavniTabulka td").css({ color: blue });
První řádek přebarví text pouze v první tabulce ve všech prohlížečích. Druhý přebarví všechna <td> v obou tabulkách, pokud prohlížeč podporuje document.querySelectorAll. Pokud dotyčnou metodu nepodporuje, přebarví <td> pouze v první tabulce.

Dneska se již používají moderní stroje a je třeba pokročit kupředu.
Vždycky se používaly moderní stroje a vždycky to lidem připadalo pomalé — proto pokračuje vývoj kupředu, nikoliv proto, že je třeba zahodit staré haraburdí. Nemá smysl hájit neefektivní algoritmus dobou, protože bude neefektivní v jakékoliv době. Možná bude zanedbatelně neefektivní v určitém kontextu, možná i ve většině možných kontextů, ale zde máme obecně položenou otázku — tak proč předpokládat, že těch buněk je pod milion a že skript poběží zcela sám na ničím nezatíženém moderním stroji?

Díky procentům s nějakým boxem (divem) po pixelech nepohneš, tzn. například v případě nějaké animace bude posun trhaný.
Řeč byla o jednorázové změně, ne o animaci. Připadá ti pohyb kurzoru myši po obrazovce trhaný? Mně ne, přestože také nejezdí po pixelech (což může někoho překvapit, překvapivě). I animace občas dělám přes procenta, abych nemusel přeměřovat rozměry, a připadají mi dost plynulé.
joe
Profil
Witiko:
myslel jsem, že tak činíš protože znáš nějaký skutečný důvod, proč daná pravidla porušovat.

Důvodů může být víc, záleží na rozvržení elementů na stránce. Ale vymyslel jsem třeba jeden důvod, kdy je to dobré, že JS vybere ten první a CSS naopak všechny:

<div id="item"></div>
<div id="item"></div>
<div id="item"></div>
...


Budou mít float: left; a margin: 0 0 10px 10px; Takže levý okraj. Díky JS vyberu jednoduše první element a levý okraj vynuluji. Můžeš namítnout, že pro to jsou různé selektory v CSS, ano jsou, ale ne všechny používané prohlížeče je již podporují.

Toho jsem si ani nevšímal, spíše jsem postřehnul neschopnost pracovat s konzolí
S konzolí nepracuju :-) V JavaScriptu nedělám nic na takové úrovni, abych ji potřeboval a k jednoduchému debugování stačí měnit buď titulek okna nebo alert(). A věř, že to nepoužívám jen já. Ono i v normálních programovacích jazycích je kolikrát jednodušší napsat Console.WriteLn(param); (což je vlastně výpis do konzole) než spouštět debugování.

Odkdy že se bavíme o animaci?
V #16 Chamurappi psal "To jsou spíš vzácné výjimky, většinou se jde opřít o něco obecného"
Tak jsem mu to vyvrátil.

EDIT:
jak jsi sám poznal.
Jediné co jsem poznal je, že ten prohlížeč na který si (neustále) stěžuju, neumí rychle vykreslovat :-) A není to ve složitosti stránky, asi mají špatné algoritmy na překreslování :-)
Witiko
Profil
Chamurappi:
To není pravda.
Ano, máš pravdu. Při testování jsem hloupě testoval s jQuery místo s document.querySelectorAll a .toString() jQuery objektu mě zmátnul. :-)

První řádek přebarví text pouze v první tabulce ve všech prohlížečích.
Skutečně? Já měl za to, že document.querySelectorAll("#hlavniTabulka") navrátí oba dva elementy. Na druhou stranu je dost možné, že při takovémto jednoduchém výrazu, od kterého se očekává jeden výsledek jQuery použije namísto toho document.querySelector("#hlavniTabulka").

joe:
k jednoduchému debugování
Ale např. procházení objektů je touto metodou vysoce nepohodlné. Oč snažší je stisknout Ctrl + Shift + J, aby se člověk během vteřiny octnul v konzoli Google Chrome? Pokud samozřejmě pracuješ v privátním scope, pak je přístup zevně nemožný, nicméně stále můžeš vypisovat libovolné hodnoty pomocí console.log a u objektů nebude výstup omezený jen na .toString() hodnotu [object Object].

Ale vymyslel jsem třeba jeden důvod, kdy je to dobré, že JS vybere ten první a CSS naopak všechny
Jak již poznamenal Chamurappi - nevybere. Nicméně document.getElementById stále bude navracet pouze jeden element.
Krom toho tebou popisované využití je zcela nahraditelné zápisem s name / class (nežádoucí, jak už jsem vysvětlil), které je k tomu i určeno a nebude třeba nesmyslně definovat ID vícekrát.

Tak jsem mu to vyvrátil.
Celou dobu se bavíme o jednorázovém přiřazení. Animace je zcela něco jiného, vyvracíš tedy proto v nepůvodním kontextu. :-)

Navíc nemáš pravdu, procenta jsou čísla s desetinnou čárkou, pokud si animaci od x% do y% rozsekáš na fáze tak, aby se ti za jednu sekundu vystřídalo alepoň 25 snímků, pak bude animace zcela plynulá. Vidíš to snad na změně průhlednosti, ta se také mění na základě procentuálních hodnot.

Chci změnit Průhlednost z 20% na 40% za jednu sekundu s 60ti snímky za sekundu? Pak budu snímky měnit v intervalu 16,66ms a po 0,33%.

asi mají špatné algoritmy na překreslování :-)
Spíš může být změna průhlednosti celého těla dokumentu s veškerým celkem náročnou záležitostí, což je důvod, proč se, ačkoliv je ubercool, příliš často nevyužívá. :-)
joe
Profil
Witiko:
aby se člověk během vteřiny octnul v konzoli Google Chrome?
Stisknout trojkombinaci kláves nebude nic těžkého, ale moc ji nepoužívám, pamatuji na starší doby s Ctrl+Alt+Del :)
(taky bych ale musel Chrome používat, ale věřím, že i v Opeře něco takového bude)

Spíš může být změna průhlednosti celého těla dokumentu s veškerým celkem náročnou záležitostí, což je důvod, proč se, ačkoliv je ubercool, příliš často nevyužívá. :-)

Já ji chci využít :-). Náročné to možná bude, ale ostatní prohlížeče to zvládají daleko rychleji.

Chci změnit Průhlednost z 20% na 40%...
Pravda, ale myslel jsem trošku jiné animace. Například pohyb boxu za kurzorem myši.

Jak již poznamenal Chamurappi - nevybere. Nicméně document.getElementById stále bude navracet pouze jeden element.
Tomu nerozumím. JavaScript mi vrátí ten první element přece, ne? To je žádoucí na tom příkladu, co jsem vymyslel.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0