21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
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""9".
quatzael
Profil
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
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
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.

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:

0