Newsgroup: it.comp.lang.javascript
Titolo: Come svuotare un div?

Salve a tutti,
qual č il modo migliore per svuotare il contenuto di un div?
Apparentemente un bel
   rif.innerHTML = '';
sembrerebbe la strada piů indolore
Ma lo č effettivamente per i browser? Viene liberata per bene la memoria o 
rimangono dei "cadaveri" che velocemente diventano dei "cimiteri" mostruosi 
con zombi indistruttibili (mi sono un po' lasciato andare con l'analogia :)

 con zombi indistruttibili (mi sono un po' lasciato andare con l'analogia :)
Ti propongo uno script che mi da soddisfazione, lo puoi adattare:
--------------------------
function scrivi(id,cn){
if (document.getElementById && !document.all){
rg = document.createRange();
el = document.getElementById(id);
rg.setStartBefore(el);
fr = rg.createContextualFragment(cn);
while (el.hasChildNodes())
el.removeChild(el.lastChild);
el.appendChild(fr);
}
else {document.getElementById(id).innerHTML = cn}
}
--------------------------
id = id del div
cn = testo da inserire nel div
--------------------------

> qual è il modo migliore per svuotare il contenuto di un div?
Provo a riformulare meglio:
c'è un modo per svuotare il contenuto di un div (caricato dinamicamente e
nel tempo di un grossa quantità di immagini) causando anche il benefico
effetto di liberazione della ram accumulata dal browser?
Tendenzialmente i modi credo che siano 2:
while( ref.lastChild )
   ref.removeChild( ref.lastChild );
op
ref.innerHTML = '';
in termini di tempo si possono considerare equivalenti (un po' + veloce il
secondo testato con un enorme/eccessiva quantità di img)
in termini di liberazione della ram mi sembrano equivalenti pero' in IE
viene liberata in FF quasi niente :(
come posso fare?

 liberata in FF quasi niente :(
Non puoi farci niente. E` una "feature" che i programmatori di FF 
rifiutano di correggere, sostenendo che se ti servono di nuovo, quelle 
immagini sono gia` in RAM.
Secondo me, semplicemente, non sanno come farlo perche` il codice e` 
troppo incasinato.
FF, purtroppo, sta peggiorando dal punto di vista tecnico (nonostante sia 
ancora il miglior browser per sviluppatori esistente, e abbia ancora il 
miglior motore di rendering/js. Ma se non si da` una mossa KHTML/WebKit lo 
superano).
Bye.

 immagini sono gia` in RAM.
Mmmm, ma cavolo nel mio caso l'immagine è la stessa :(

 Ma lo è effettivamente per i browser?
stavo provando a svuotare un tbody allo stesso modo, e ho scoperto che
in konqueror non funziona proprio.
naturalmente, non mi pongo problemi sofisticati di uso della memoria
come nel tuo caso, ma di mera funzionalità.
qui: 
http://cloc3.dyndns.org/index.html/doku.php/macchia_e_smacchia
 ho
collocato un programmino banale dove si vede il problema.
konqueror-3.5.7 si blocca sulla funzione reset, inibendo il pulsante
Azzera.
in firefox, invece, il codice sembrerebbe andare.
il ciclo while di Ugo, invece, mi funziona in entrambi i browser.

 come nel tuo caso, ma di mera funzionalità.
Potresti rimuovere il tbody incriminato e "appenderne" uno ex-novo. O,
se dovesse avere diversi attributi, potresti clonarlo senza nodi figli
e poi rimuovere l'originale.
-- 
~ "Ho avuto la fortuna di unire mestiere e passione,
che secondo Stendhal equivale alla felicità."
(Roland Barthes)


:) scusa. è evidente che la mia è un domanda da programmatore
inesperto. ma ho usato appositamente un thread che (a mio parere)
discuteva di un problema analogo.
non sapevo che le table avessero comportamenti particolari.
ma non capisco il senso in cui tu dici che non costituiscano standard:
http://www.itistorriani.it/accessibilita/risorse/w3c/html401/struct/tables.html#edef-TBODY
in ogni caso, ho notato che i problemi possono essere anche maggiori
di quelli che ho indicato sopra.
con mia sorpresa, infatti, ho notato che il mio programma non gira
affatto su IE (o forse, gira un 50%), nemmeno se uso una versione
completamente priva di innerHTM (purtroppo non ho IE e per testarlo
devo andare a fuori casa).
può dipendere esclusivamente dal fatto che ho usato una tabella?
le uniche istruzioni che usato sono:
document.getElementById
document.createElement
rif.setAttribute
rif..appendChild
Boolean
e cose di di stile.
ciao e grazie.

 ciao e grazie.
De nada, a presto.
-- 
~ "Quando ti rifiuti di imparare una lezione in un modo,
ti verrà ripresentata sotto un altro aspetto." (E.Caddy)

 document.createElement
createElement crea problemi con IE...
dato che stai aggiungendo righe-colonne anziché usare
createElement("tr")/"td" usa cloneNode per "duplicare" una riga "fake"
(attenzione al parametro):
 
http://developer.mozilla.org/en/docs/DOM:element.cloneNode
cambi l'innerHTML delle celle e usi appendChild sul tbody:
 
http://developer.mozilla.org/en/docs/DOM:element.appendChild
(per il loro utilizzo, anche se l'esempio non usa una tabella, guarda qua:
 
http://www.criosoftware.it/default43.aspx
)
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.