Autor Zpráva
anonymníí
Profil *
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 *
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
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
anonymníí:
Copak čistý javaskript nemá ekvivalent .prev() z jQuery
Môžeš použiť previousElementSibling, avšak podpora až od IE9

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: