Autor | Zpráva | ||
---|---|---|---|
preca2 Profil * |
#1 · Zasláno: 29. 7. 2014, 15:08:03
Zdravim,
narazil sem na zajímavé chování IE9+ a zajímalo by mě, jestli mi ho někdo dokáže vysvětlit. Živou ukázku bohužel nemůžu dodat a pokud se snažím podobné chování udělat na jednodušším příkladu, vše funguje jak má, takže musí být chyba v tomto konkrétním případě (ale můj kód se mi zdá správný). Poznámka: Nepotřebuju radu, abych použil jQuery, nebo nějakou knihovnu. Hledám chybu ve svém myšlenkovém pochodu / kódu, případně vysvětlení, proč ten kód funguje tak, jak funguje. A proč se v ostatních prohlížečích chová korektně. Mam metodu, metoda má vykreslit seznam hodnot. Problém je ten, že v IE sou LI elementy prázdný. Žádná chyba v konzoli neni, při debugování žádná proměnná neni null, ani prázdná. Problém dělá zvýrazněnej řádek. Pokud ho dám pryč, tak se vše krásně zobrazí. Akorát přijdu o referenci na ten element a nechce se mi pokaždý volat getElementById, když už jednou ten element mam. Ještě sem si všiml, že pokud vytvořím kopii elemntu a ten se pokusim vložit ( this.baseEl.appendChild(contestEl.cloneNode(true)); ), tak se vloží. Jenže když tu kopii uložim, tak je následně zase vykreslen jako prázdný.
I když element uložim potom, co ho vložim do DOMu, tak se zobrazí prázdnej. Abych to teda shrnul, pokud element uložím do svého objektu, tak se v DOMu vykreslí prázdnej. Tuší někdo, proč by to tak mohlo být? Díky Ukázka DOMu v prohlížečích. // v konstruktoru mám: this.contestsEl = {}; // this.baseEl je UL ContestsNavigationView.prototype.redraw = function () { // načtu ID viditelnejch soutěží var contestIds = this.store.visibleContestsIds.slice(), contestIdsLength = contestIds.length, message, i, contestId, contest, contestEl; // iteruju přes výše načtený ID. Pokud element pro danou soutěž už existuje, použiju ho, // pokud neexistuje, vytvořim ho a uložim si ho do vnitřní struktury, abych ho příště jen vytáh a nemusel ho dělat znova a abych ho pořád dokola nemusel hledat v DOMu for (i = 0; i < contestIdsLength; i++) { contestId = contestIds[i]; contestEl = this.contestEls[contestId]; if (contestEl == null) { contest = this.store.contests[contestId]; // data contestEl = this.createCardEl(contest); // return document.createElement("li"); this.updateContestEl(contestEl, contest); // el.innerHTML = "fffffuuuuuuu"; this.contestEls[contestId] = contestEl; // uložení napříště - tenhle řádek dělá problém } this.baseEl.appendChild(contestEl); // contestEl neni null a innerHTML == "fffffuuuuuuu" //this.baseEl.appendChild(contestEl.cloneNode(true)); // takto se element krásně vloží, pokud kopii neuložim } }; |
||
_es Profil |
#2 · Zasláno: 29. 7. 2014, 20:20:53
preca2:
„Živou ukázku bohužel nemůžu dodat“ Prečo by si „nemohol“? Uložiť stránku v prehliadači a niekam dať tak, aby bola ukážka dostupná snáď dokážeš. Nie sme jasnovidci, aby sme vedeli, čo robia tvoje tajomne nazvané metódy. |
||
Časová prodleva: 10 let
|
0