| 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 documentu. 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 documentu 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: 11 let
|
|||
0