Autor | Zpráva | ||
---|---|---|---|
anonymníí Profil * |
#1 · Zasláno: 1. 2. 2014, 22:45:25
Ahoj, už se tu snažím celkem dlouho přijít na chybu a pořád ji nevidím... Rád bych vás požádal o pomoc.
Kód: http://kod.djpw.cz/wpbb Bude to nějaká blbost, ale za boha ji nevidím.... Díky za pomoc |
||
Joker Profil |
anonymníí:
Protože jak za <dd>, tak před tím <div>em jsou odřádkování a tabulátory, firstChild i previousSibling jsou textové uzly. Pro získání předchozího elementu by šlo dělat previousSibling tak dlouho, dokud nodeType nebude 1. Doplnění: …nebo dokud ten previousSibling nebude undefined, samozřejmě. |
||
anonymníí Profil * |
#3 · Zasláno: 1. 2. 2014, 23:14:58
Joker:
Hm, koukal jsem do firebugu a ten ty bílé znaky jako textové uzly nebere. Jen pokud tam je klasicky text. Co bys mi doporučil, co bude nejrychlejší/nejlepší? Ve smyčce dávat previousSibling a uvnitř to podmínkovat se mi moc nechce, zdá se mi to lehce nehospodárné. Copak čistý javaskript nemá ekvivalent .prev() z jQuery (resp. obráceně, .prev() v jQuery pracuje taky se smyčkou, dokud na něco nenarazí?).
|
||
Radek9 Profil |
#4 · Zasláno: 1. 2. 2014, 23:47:37
anonymníí:
„.prev() v jQuery pracuje taky se smyčkou, dokud na něco nenarazí?“ Ano. Ostatně se můžeš podívat sám do zdrojáku. Hledej funkci sibling a její volání.
|
||
Joker Profil |
anonymníí:
„zdá se mi to lehce nehospodárné“ Proč? Já bych řekl, že k problému: „Je seznam prvků a ukazatel na aktuální prvek, chci najít nejbližší dřívější prvek určitého typu“ je řešení: „Posunuj se na předchozí prvek tak dlouho, dokud aktuální prvek není daného typu nebo nedošly prvky“ docela logické a často žádné lepší neexistuje. Vzhledem k tomu, že se typicky ten cyklus provede maximálně dvakrát (mezi dvěma elementy bude obvykle maximálně jeden textový uzel) mi to nepřijde nijak tragické. Samozřejmě (nepatrně) rychlejší varianta by byla nějak spolehlivě zařídit, aby ty elementy šly těsně za sebou a mezi nimi nebylo vůbec nic. Ale i pak bych to zaměření udělal cyklem a tohle by jen způsobilo, že ten cyklus proběhne jen jednou (místo dvakrát). „resp. obráceně, .prev() v jQuery pracuje taky se smyčkou, dokud na něco nenarazí?“ Na to je nejlepší se podívat přímo do jQuery. A zjistit, že prev() ve výsledku udělá „do previousSibling while nodeType !== 1“, neboli přesně to co jsem psal. To je to kouzlo, když se to zabalí do jednoho volání funkce. |
||
pcmanik Profil |
#6 · Zasláno: 2. 2. 2014, 10:21:25
anonymníí:
Copak čistý javaskript nemá ekvivalent .prev() z jQuery Môžeš použiť previousElementSibling, avšak podpora až od IE9 |
||
Časová prodleva: 11 let
|
0