Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
Mám ve scriptu něco takového:
var elements = this.elem_item.find(".special-class"); // konzola ukazuje správně, že proměnná elements obsahuje 10 elementů for (line_object in elements) { // něco // cyklus for se neprovede 10krát, ale nespočetně víckrát (než celý doběhne trvá to asi 5 sekund) } Netuší prosím někdo, kde by mohl být problém? Potřebuju si jen do proměnné vložit "DOM elementy" (nebo jak se tomu říká) a potom je nechat všechny projet cyklem. |
||
Chamurappi Profil |
Reaguji na quatzaela:
Smyčka for -in se na procházení polí nepoužívá, je určena k získání všech členů objektu, včetně metod. Do line_object se budou postupně dávat řetězce – názvy těchto členů.
Vypiš si line_object přes console.log a uvidíš, co v něm je, ne? To by měla být první úvaha, která tě napadne, když se něco vykonává podezřele víckrát, tedy zjistit, co se v těch nadbytečných případech děje.
Co je zač find ? Co vrací? Jestli je to find z jQuery, tak nevrací pole, ale jQuery objekt… a ten má na sobě spoustu jiných věcí, než "0" až "9" .
|
||
quatzael Profil |
#3 · Zasláno: 1. 3. 2015, 16:32:18 · Upravil/a: quatzael
Aha. Zdá se, že proměnná elements neobsahuje elementy, ale zřejmě vlastnosti a metody těch elementů:
length, prevObject, context, selector, constructor, atd.. Chamurappi: Je to z jQuery.. Já potřebuju čistě ty elementy, abych s nima mohl dělat to co s elem_item například..
Tady by se hodila funkce getElementsByClassName, ale já potřebuju vybrat ne všechny, který se nachází na stránce, ale jen ty který jsou uvnitř elem_item ..
|
||
Chamurappi Profil |
#4 · Zasláno: 1. 3. 2015, 16:48:05
Reaguji na quatzaela:
„Tady by se hodila funkce getElementsByClassName, ale já potřebuju vybrat ne všechny“ Však také metoda getElementsByClassName je i na elementech, ne jen na document u. Ale neexistuje v Exploreru 8.
„Já potřebuju čistě ty elementy“ Tak si je projdi cyklem. Jaká jen v tom věda? Jen prostě nepoužívej for -in , když nechceš seznam členů objektu.
Ani na kolekci vrácenou z getElementsByClassName bych ti for -in nedoporučil. Chyba není v tom, čím hledáš, ale jak procházíš výsledky.
|
||
quatzael Profil |
Chamurappi:
„Však také metoda getElementsByClassName je i na elementech, ne jen na documentu. Ale neexistuje v Exploreru 8.“ Já jí tam mám nadefinovanou, pro případ, že by neexistovala.. Jenže i když zkouším: var my_object = new MY_OBJECT_DEF; my_object.offer_item = $('#id_elem'); var elements = this.offer_item.getElementsByClassName(".special-class"); // nefunguje, píše to: Objekt neumožňuje použití vlastnosti či metody getElementsByClassName. tak to nefunguje. „Jaká jen v tom věda? Jen prostě nepoužívej for-in, když nechceš seznam členů objektu.“ A co mám teda použít? While ?
|
||
lionel messi Profil |
quatzael:
„A co mám teda použít? While ?“
Napríklad obyčajný cyklus for s použitím iteračnej premennej:
var pole = [1, 2, 3, 145]; for (var i = 0; i < pole.length; i++) { var prvek = pole[i]; //tu bude kód pracujúci s prvkom poľa (uloženým do premennej prvek) } |
||
Chamurappi Profil |
#7 · Zasláno: 1. 3. 2015, 17:22:04
Reaguji na quatzaela:
„Já jí tam mám nadefinovanou, pro případ, že by neexistovala“ Ale předpokládám, že jen omezeně, jen na document u a ne na všech elementech.
„tak to nefunguje“ V this.offer_item není element, ale nějaký jQuery objekt a ten samozřejmě metodu getElementsByClassName nemá.
Krom toho do getElementsByClassName se nepíše tečka před název třídy.
Proč se snažíš vytvořit si další chybu, když ses ještě nezbavil té první? :-) „A co mám teda použít? While ?“
Normální for . Bez in .
|
||
quatzael Profil |
Chamurappi:
„Ale předpokládám, že jen omezeně, jen na documentu a ne na všech elementech.“ Jo, to asi jo. Taky mě to napadlo. „Proč se snažíš vytvořit si další chybu, když ses ještě nezbavil té první? :-)“ Zkouším vše co se dá, už jsem zoufalej. Mám tam šílenou objektovou strukturu, tak mi z toho už trochu.. hrábě..:o) lionel messi, Chamurappi: Takhle se zdá, že už to funguje. (Mimo fakt, že mi ještě nefunguje něco jinýho, ale to už s tím snad nemá žádnou spojitost) Díky moc. |
||
Časová prodleva: 9 let
|
0