Autor | Zpráva | ||
---|---|---|---|
DarkMeni Profil |
#1 · Zasláno: 8. 5. 2012, 13:38:11
Zdravím, když vytvořím element doporučovanou DOM funkcí (takže ne přes innerHTML ale pomocí
document.createElement(); , a pak ho budu chtít někde odstranit:
element.removeChild(co_chci_odstranit); |
||
Chamurappi Profil |
#2 · Zasláno: 8. 5. 2012, 14:23:58
Reaguji na DarkMeniho:
Pokud se už na ně ve skriptu nepůjde žádným způsobem dostat (tzn. zanikne i obsah proměnných, ve kterých ten element máš), budou moci být smazány. Což neznamená, že se paměť uvolní hned. „když vytvořím element doporučovanou DOM funkcí (takže ne přes innerHTML“ Proč přesně nechceš použít innerHTML ?
|
||
DarkMeni Profil |
Snad je to rychlejší a innerHTML přepisuje (maže) události.
Takže nakonec: element.removeChild(co_chci_odstranit); delete co_chci_odstranit; Ještě otázka: Proměnné vytvořené uvnitř funkce se po dokončení funkce smažou? (nedá se k nim pak už dostat) function a(){ var b = 1; return b; } var c = a(); 1 bitová proměnná je sice nic moc na tento příklad, ale kdyby tam bylo těch proměnných víc a obsahovaly by elementy, které si myslim tahaj docela dost paměti. |
||
DarkMeni Profil |
#4 · Zasláno: 8. 5. 2012, 17:42:52
Nebo je rychlejší innerHTML? Teď jsem narazil na W3C DOM vs. inneHTML a tam je prej že je innerHTML o dost rychlejší.
Jak často si javascript čistí paměť? (Jako jestli až dorazí k limitu nebo to dělá v nějakých časových intervalech?) |
||
_es Profil |
DarkMeni:
„Teď jsem narazil na W3C DOM vs. inneHTML a tam je prej že je innerHTML o dost rychlejší.“ Metóda innerHTML sa dá použiť vhodne aj nevhodne. Nevhodné je napríklad pridávať obsah spôsobom element.innerHTML+=pridanýObsah . Oba spôsoby sa dajú aj vhodne kombinovať.
„nebo se removeChild postará i o odstranění odebraného elementu?“ Treba spraviť, aby premenná co_chci_odstranit neodkazovala na vybraný element, alebo, ak je lokálna, obvykle zanikne po skončení funkcie. Na premenné operátor delete nemá vplyv. Obvykle sa takýmito detailami nemá veľký zmysel zapodievať.
„Proměnné vytvořené uvnitř funkce se po dokončení funkce smažou? (nedá se k nim pak už dostat)“ Nie vždy, len „ak sa k nim nedá dostať“. Ak napríklad zostanú nejako zachované funkcie do tej funkcie vnorené, tak môžu zostať zachované aj premenné. „Jak často si javascript čistí paměť?“ Rôzne prehliadače to robia rôzne. |
||
DarkMeni Profil |
#6 · Zasláno: 9. 5. 2012, 14:57:26
element.innerHTML += 'Obsah'; Je nevhodné kvůli čemu? (Jen aby jsem si v tom udělal jasno)
Nebo takto - jestli to chápu dobře: Na vnoření elementu do jiného elementu je vhodné použít teda DOM metodu appendChild (když spojení řetězců (+=) u innerHTML je nevhodné) A na přepsání celého obsahu elementu je teda vhodné i innerHTML? Co jsem četl jak je to s delete a proměnnou - když for in není stavěný na procházení pole (ale umí to), je teda něco, co na procházení prvků v poli je stavěné (pro každý prvek v poli udělej to a to - něco jako v php foreach)? Jinak díky. |
||
Radek9 Profil |
DarkMeni:
„Je nevhodné kvůli čemu?“ Třeba proto, že to všechny elementy tvoří znova. „co na procházení prvků v poli je stavěné“ Klasický for: for(var i=0;i<array.length;++i){ … } |
||
_es Profil |
DarkMeni:
„element.innerHTML += 'Obsah'; Je nevhodné kvůli čemu?“ Stručné vysvetlenie. Príklad, aké komplikácie to môže spraviť. |
||
DarkMeni Profil |
#9 · Zasláno: 10. 5. 2012, 16:55:44
_es:
Jo to sou ty přepisovaný události, aha, díky. Radek9: Tak pořád je to cyklus for, je to aspoň rychlejší? |
||
Radek9 Profil |
#10 · Zasláno: 10. 5. 2012, 17:34:53
DarkMeni:
„Tak pořád je to cyklus for“ Ano, ale musíš rozlišovat for…in a klasický for . for…in je určený k procházení obecných objektů (tedy vlastně jakýchsi hash-map). Pole procházej tím druhým způsobem, promítnou se ti potom jen indexy, ne i vlastnosti objektu Array.
|
||
DarkMeni Profil |
#11 · Zasláno: 10. 5. 2012, 17:48:44
A jo, u Array.prototype.mojeMetoda mi to někdy dělalo problém, díky.
|
||
Časová prodleva: 11 let
|
0