Newsgroup: it.comp.lang.javascript
Titolo: Testo "dinamico"

Ciao a tutti,
da un po' di tempo ho una homepage per sfizio, sono partito da una
conoscenza di base dell'html e fai questo oggi fai questo domani piano piano
mi sto impratichendo.
Da qualche tempo ho iniziato anche a studicchiare javascript, dato che mi
serviva per alcune cose.
Adesso ho un problemino: nella mia pag c'è un box (un elemento <td>) con una
citazione casuale. La casualità la ottengo con uno script che sceglie
casualmente da un array e poi fa un document.write(), per cui ad ogni
refresh la citazione cambia.
Mi piacerebbe però che fosse possibile anche cambiare la citazione cliccando
su un bottone o su un link, però non so come fare. A quanto ho capito è
possibile cambiare il testo solo all'interno di un form, e il
document.write() se usato dopo il caricamento della pagina cancella tutto.
Come faccio? devo per forza usare un <textarea> impostato su readonly?
-- 
Bruno Barbera
http://www.brigcam.com/

 Come faccio? devo per forza usare un <textarea> impostato su readonly?
Qui viene in aiuto il DOM W3C. Inserisci l'attributo ID all'interno 
dell'elemento TD:
<td id="mioTd">
Poi basta fare:
var mioTd = document.getElementById("mioTd");
mioTd.innerHTML = miaStringa;
Questo funziona con Internet Explorer 5.5+, Netscape 6+ e Mozilla.
Gaetano
P.S.:
Ad essere sinceri la proprietà innerHTML non è definita nel DOM W3C ma è 
  implementata per comodità nei browser suddetti. Se hai bisogno di fare 
cose più complicate ecco il metodo standard:
// rimuove tutti i figli di un elemento
function removeChildren(elem)
{
   var children = elem.childNodes;
   for (var i = children.length - 1; i >= 0; i--)
     elem.removeChild(children[i]);
}
var mioTd = document.getElementById("mioTd");
removeChildren(mioTd);
mioTd.appendChild(document.createTextNode(miaStringa));
Ecco dove puoi trovare informazioni sul DOM Level 2 Core:
http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html

 mioTd.appendChild(document.createTextNode(miaStringa));
Questo invece mi visualizza la stringa pari pari, tag compresi, per cui non
ho potuto usarlo. Magari esiste un altro document.createQualcosa per far sì
che i tag all'interno della stringa vengano interpretati dal browser?
E già che ci siamo: è possibile invece di una stringa inserire proprio un
file esterno? oppure un qualcosa per assegnare ad una stringa il contenuto
di un file?


 ho potuto usarlo. [...]
Il questo modo il DOM ti permette di creare la strutura ad albero del 
documento a tuo piacimento. Ad esempio:
var b = document.createElement("B");
var text = document.createTextNode(miaStringa);
b.appendChild(text);
mioTd.appendChild(b); // ho inserito un testo in bold
var br = document.createElement("BR");
mioTd.appendChild(br); // un break
var img = document.createElement("IMG");
img.src = "
http://www.miosito.it/images/image1.jpg
";
mioTd.appendChild(img); // ho inserito un'immagine
Gaetano

 documento a tuo piacimento. 
Beh, fosse solo questo anche con l'innerHTML lo fai, e lo fai piu' 
velocemente.. Il punto e' che in fondo, l'innerHTML e' un po' un metodo 
teppista.
Il vantaggio del DOM e' che hai i vari elementi in memoria, e puoi 
lavorarci utilizzando i loro metodi/proprieta'/eventi prima di 
collocarli fisicamente nel DOM tree della pagina.
E' un po' piu' una rottura perche' per scrivere dell'HTML annidato e 
complesso ci metti qualche riga di codice :)
Su Mozilla esiste una gran bella cosa chiamata DOMParser, ma a meno che 
non abbia cannato qualcosa io (e quando si sperimenta nuove tecnologie 
e' sempre plausibile), al momento ti restituisce solo nodi XML e XUL, 
ma non HTML.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)