Newsgroup: it.comp.lang.javascript
Titolo: Aggiungere elementi a runtime.

Ciao a tutti!
E' possibile in JS aggiungere un elemento (layer,applet,ecc ) in un
documento a runtime?  Forse usando document.write ? Mi potreste fare un
esempio semplice semplice?
grazie
Andrea

 wrote in
message
FXaa4.8830$1W4.1...@news.infostrada.it...

Solo per IE:
document.body.insertAdjacentHTML("beforeEnd","<div
......")
document.body.insertAdjacentHTML("afterBegin","<a.
.....")
con il docment.write dovresti riscrivere tutta la
pagina, il che diventa già un po' più
complicato....
--
Bye.
-----------------------------------------
                Ðarius.
    <- 
www.infotronica.it/darius
 ->
             ICQ# 36150792
  - Art of JavaS.T - 
www.probo.it/aoj

Mi potreste fare un esempio semplice semplice?
--8<--zicchete--8<--zacchete--8<--zicchete--8<--zacchete
<div id=divScroll>
	<img src="gif/scroll.gif" width=2 height=390 alt=""
border="0">
</div>
<div id=divScrollHot onmousedown="dragMe(event);">	
	<script>
		if (ie)
			document.write('<img src="gif/scroll_hot.gif"
width=12 height=12 alt="" border="0">');
		if (n)
 
			document.write('<a class="scrollHot" href="#"
onmousedown="dragMe(event); "><img src="gif/scroll_hot.gif" width=12
height=12 alt="" border="0"></a>');
		document.close;
 
	</script>
</div>
--8<--zicchete--8<--zacchete--8<--zicchete--8<--zacchete
In questo pezzo, la pagina "si scrive" una parte di codice, piuttosto
che un'altra, dipendentemente dal browser su cui viene letta (se
Netscape o IE).
Stai attento pero'!!
La scrittura del codice della pagina in run-time, SOPRATTUTTO se hai
intenzione di scrivere dei layer e poi referenziarli per un uso
dinamico, puo', in certi casi, mandare in ciampanella Netscape...
.. Il consiglio e' quello di stare sempre attenti a quel che si fa,
quando si usa il document.write...
--
C'ya,
 Benjamin Reilly
  |
  |
'/|\'
\\O//
//"\\
'\ /'
________________________________________TagLine___
"Quanti Angeli danzano sulla punta di uno spillo?"

complicato....
Err.. Non e' necessariamente vero. :)


dinamico, puo', in certi casi, mandare in ciampanella Netscape...
in ciampanella...
...mi mancava, che dialetto e'?
^___^
(no sul serio, mi sembra bolognese o comunque dell'emilia, ma non ne sono
per niente sicuro...)
Ciau Ciau
(e perdona questo OT)
Nettuno

per niente sicuro...)
Hai sbagliato mira. :)


 Err.. Non e' necessariamente vero. :)
Ah, no? Cosa fai, per esempio, quando onLoad è già
stato chiamato? Se chiami un
document.write("ciao") si cancellerà tutta quanta
la pagina e rimarrà solo la scritta "ciao", lo
sapevi? Eppure siamo sempre run-time, come
specificato da Andrea...
E se provi a chiamare un document.write() su un
frame che sta caricando oggetti "pesanti", tipo
immagini, suoni, filmati, la maggior parte dei
browser inizierà a sollevarti eccezioni da tutte
le parti. Come la mettiamo? Continuiamo ad essere
run-time, ricordiamocelo...
Fai attenzione a non confondere la creazione
dinamica di un documento con l'inserimento
dinamico di elementi, che sono due cose ben
distinte!
Il primo caso è quando usi document.write() nel
modo in cui hai fatto tu per creare una pagina in
base a determinate situazioni, per es:
<body>
<tags vari>
<script>
    if(_ie)
        document.write("codice per IE")
    else document.write("codice per altri")
</script>
<tags vari>
</body>
Se invece hai una pagina HTML completa e già
caricata (onLoad è già stato chiamato), e in un
certo momento vuoi aggiungere per esempio un layer
o qualunque altro oggetto che prima *non
esisteva*, allora stiamo parlando di inserimento
dinamico di elementi nel codice, che non puoi più
risolvere con un semplice document.write()!
Con IE4 o sup., puoi usare insertAdjacentHTML(),
ma questa funzione non è supportata da NS. Il
nuovo W3C DOM supporta a pieno l'inserimento
dinamico di elementi, e se i browsers tanto per
cambiare rispetteranno pienamente le nuove
specifiche nelle prossime versioni, allora
l'operazione non richiederà più particolari
difficoltà, ma fino a quel momento siamo costretti
a dire o che il problema non si risolve, o che si
risolve riscrivendo *tutto* il documento, tag per
tag, con le nuove modifiche:
document.write("<html><head>....</head><body>.....
.<nuovi elementi>...</body></html>")


tag, con le nuove modifiche:
Il che, scusami, ma per i miei canoni e' un attimo improponibile...


 Il che, scusami, ma per i miei canoni e' un
attimo improponibile...
Mica tanto! Tu non sai quali grandi cose si
possano fare con la procedura sopra citata.
Vuoi un esempio banale?
if (this==parent)
    document.write("<frameset><frame src='"
+location.href +"'><frame ....... ")
E' lo script che serve per creare frames nascosti
dinamicamente, o per inserire la pagina stessa
dentro un frameset: dimmi se è improponibile. Il
concetto è lo stesso, cambia solo la forma...
A livello più alto questa tecnica si usa per
dinamizzare i layers con Netscape, per far fronte
al buco dei CSS, ma se secondo te è
improponibile... non proporre questa strada.
;)
Un'altra soluzione alternativa al riscrivere tutta
la pagina, volendo, sarebbe anche quella di usare
un <ilayer> per NS e inserire i tags solo lì
dentro (sempre tramite riscrittura, ben inteso).
Alla prox.


improponibile... 
Ecco, questo discorso non l'ho proprio capito. Sara' che ho appena
finito una giornata di intenso lavoro (che per'altro non e' cominciata
nemmeno benissimo ;) )... ma cosa intendi?


 nemmeno benissimo ;) )... ma cosa intendi?
Che con Netscape non puoi cambiare dinamicamente
le proprietà e lo stile degli elementi contenuti
in un layer e devi per forza
"ri-document.write()-izzarlo" tutto.
Un esempio, se vuoi, lo puoi trovare su
www.probo.it/javascript/esempi/sfida_avalenti/
fatto da Ro<*¿*>berto, uno dei più bravi e più
esperti programmatori del web che capiti di
incontrare. Uno che non si tira mai indietro se si
tratta di innovazione nel modo di programmare.
Guarda anche il sito 
www.probo.it/javascript/
:
dentro il codice (tutto in JS, tra l'altro) non
c'è assolutamente nulla di canonico, di
tradizionale, di "proponibile", eppure quello è il
suo stile, e funziona benissimo su una vasta gamma
di browsers. ;)
Ovviamente il lavoro che si compie è un pochino
maggiore di quello necessario a fare la solita
paginetta in FrontPage, ma almeno si ha la
certezza di fare un sito che vada al di là di
quelli che si vedono in giro.
Guarda i siti medi che ci sono in Italia. Guarda
quello del ministero della difesa. Hai seguito il
grande scandalo? Era stato fatto in FrontPage da
uno che di HTML ne sapeva quanto io di Aramaico,
faceva schifo come impaginazione e con Netscape
non funzionavano un sacco di cose anche se non
c'era una sola riga di JS!!.
Questo era un caso estremo, ovviamente, e lo
chiudiamo subito per non parlarne più, però se
andiamo un po' a confrontare la maggioranza dei
siti italiani con quelli americani troviamo un bel
po' di differenza. La differenza è che loro
sperimentano e innovano in continuazione. Chissà
che bello se un giorno l'Italia smettesse di
essere considerata come quell'arretrato paese che
tutti dicono... ;)
Bom.. direi che per oggi ho scritto abbastanza...
;)
Buona notte e Buon Anno.


Buona notte e Buon Anno.
Anche a te, alla prossima!
