Il seguente codice visualizza il calendario di un anno qualsiasi, dopo l’input dell’anno stesso.
codice:<!doctype html> </html> <head> <style> #id_tab { position:relative; top:100px; left:100px; color:red } </style> </head> <body> <script> mesi = new Array( "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"); giorni_mese = new Array(12); giorni_mese[0]=31; giorni_mese[1]=28; giorni_mese[2]=31; giorni_mese[3]=30; giorni_mese[4]=31; giorni_mese[5]=30; giorni_mese[6]=31; giorni_mese[7]=31; giorni_mese[8]=30; giorni_mese[9]=31; giorni_mese[10]=30; giorni_mese[11]=31; var lista_mesi var anno=prompt("Inserisci anno del calendario", " "); for (lista_mesi=0; lista_mesi<=11; lista_mesi++) { var annox=new Date(); annox.setYear(anno); annox.setMonth(lista_mesi); annox.setDate(1); oggi_giorno=annox.getDay(); //il giorno odierno (1 lunedi,2 martedi ecc..., domenica 7) oggi_mese=annox.getMonth(); oggi_data=annox.getDate(); oggi_anno=annox.getFullYear();codice:if (((oggi_anno % 4 == 0) && !(oggi_anno % 100 == 0)) || (oggi_anno % 400 == 0)) //verifica se anno bisestile { giorni_mese[1]=29; //incremento di 1 a febbraio } spazi_inizio=oggi_data; //spazi_inizio contiene il giorno del mese while (spazi_inizio > 7) //si tolgono i multipli di 7 dal giorno delmese { spazi_inizio-=7; } spazi_inizio = oggi_giorno - spazi_inizio; //calcolo giorni da "scartare" ad inizio tabella if (spazi_inizio < 0) //verifica { spazi_inizio+=7; } //stampa tabella contente il calendario id_tab=lista_mesi+"xxx" document.write("<TABLE id=id_tab border=2 >"); //stampa della primariga con mese e anno document.write("<TR><TD colspan=7><CENTER><B>"+mesi[oggi_mese]+" " +oggi_anno+"</B></CENTER></TD></TR>"); document.write("<TR>"); document.write("<TD align=center>Lun</TD>"); document.write("<TD align=center>Mar</TD>"); document.write("<TD align=center>Mer</TD>"); document.write("<TD align=center>Gio</TD>"); document.write("<TD align=center>Ven</TD>"); document.write("<TD align=center>Sab</TD>"); document.write("<TD align=center>Dom</TD>"); document.write("</TR>"); document.write("<TR>"); //stampa colonne vuote a inizio tabella for (s=0;s<spazi_inizio;s++) { document.write("<TD> </TD>"); } i=1; //stampa celle contenenti i giorni del mese while (i <= giorni_mese[oggi_mese]) { //stampa di ogni riga con ciclo for //si usa spazi_inizio per saltare le prime celle vuote se presenti //dalla seconda riga b inizia sempre da 0 in quanto for (b = spazi_inizio;b<7;b++) { document.write("<TD>"); if (i <= giorni_mese[oggi_mese]) //stampa giorno del mese se mese non è ancora finito { document.write(i); } else { document.write(" "); } if (i==oggi_data) { document.write("</B></FONT>"); } document.write("</TD>"); i++; //incremento indice di riga } document.write("</TR>"); document.write("<TR>"); spazi_inizio=0; //dalla seconda riga in poi spazi_inizio vale sempre 0 } document.write("</TABLE>"); } </script> </body> </html>
Nel ciclo for (lista_mesi=0; lista_mesi<=11; lista_mesi++) usato per scrivere le dodici table dei mesi, a ogni table è assegnato un identificatore id_tab= id_tab=lista_mesi+"xxx" che assume successivamente i valori 0xxx, 1xxx, …, 11xxx
che permettono al CSS del BOM
<style>
#id_tab {
position:relative;
top:100px;
left:100px;
color:red
}
</style>
posto tra <head> e </head>, di cambiare aspetto alle tabelle e cambiare la loro posizione,
ma tutte allo stesso modo.
Io vorrei invece dare una posizione diversa alle varie table variando i valori delle proprietà top e left
usando i valori della variabile lista_mesi del ciclo.
Per ottenere questo risultato ho modificato così il codice:
codice:<!doctype html> </html> <head> <meta charset="UTF-8"> </head> <body> <script> mesi = new Array( "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"); giorni_mese = new Array(12); giorni_mese[0]=31; giorni_mese[1]=28; giorni_mese[2]=31; giorni_mese[3]=30; giorni_mese[4]=31; giorni_mese[5]=30; giorni_mese[6]=31; giorni_mese[7]=31; giorni_mese[8]=30; giorni_mese[9]=31; giorni_mese[10]=30; giorni_mese[11]=31; var lista_mesi var anno=prompt("Inserisci anno del calendario", " "); for (lista_mesi=0; lista_mesi<=11; lista_mesi++) { var annox=new Date(); annox.setYear(anno); annox.setMonth(lista_mesi); annox.setDate(1); oggi_giorno=annox.getDay(); //il giorno odierno (1 lunedi,2 martedi ecc..., domenica 7) oggi_mese=annox.getMonth(); oggi_data=annox.getDate(); oggi_anno=annox.getFullYear(); if (((oggi_anno % 4 == 0) && !(oggi_anno % 100 == 0)) || (oggi_anno % 400 == 0)) //verifica se anno bisestile { giorni_mese[1]=29; //incremento di 1 a febbraio } spazi_inizio=oggi_data; //spazi_inizio contiene il giorno del mese while (spazi_inizio > 7) //si tolgono i multipli di 7 dal giorno delmese { spazi_inizio-=7; } spazi_inizio = oggi_giorno - spazi_inizio; //calcolo giorni da "scartare" ad inizio tabellacodice:if (spazi_inizio < 0) //verifica { spazi_inizio+=7; } //stampa tabella contente il calendario id_tab=lista_mesi+"xxx" document.write("<TABLE id=id_tab border=2 >"); //stampa della primariga con mese e anno document.write("<TR><TD colspan=7><CENTER><B>"+mesi[oggi_mese]+" " +oggi_anno+"</B></CENTER></TD></TR>"); document.write("<TR>"); document.write("<TD align=center>Lun</TD>"); document.write("<TD align=center>Mar</TD>"); document.write("<TD align=center>Mer</TD>"); document.write("<TD align=center>Gio</TD>"); document.write("<TD align=center>Ven</TD>"); document.write("<TD align=center>Sab</TD>"); document.write("<TD align=center>Dom</TD>"); document.write("</TR>"); document.write("<TR>"); //stampa colonne vuote a inizio tabella for (s=0;s<spazi_inizio;s++) { document.write("<TD> </TD>"); } i=1; //stampa celle contenenti i giorni del mese while (i <= giorni_mese[oggi_mese]) { //stampa di ogni riga con ciclo for //si usa spazi_inizio per saltare le prime celle vuote se presenti //dalla seconda riga b inizia sempre da 0 in quanto for (b = spazi_inizio;b<7;b++) { document.write("<TD>"); if (i <= giorni_mese[oggi_mese]) //stampa giorno del mese se mese non è ancora finito { document.write(i); } else { document.write(" "); } if (i==oggi_data) { document.write("</B></FONT>"); } document.write("</TD>"); i++; //incremento indice di riga } document.write("</TR>"); document.write("<TR>"); spazi_inizio=0; //dalla seconda riga in poi spazi_inizio vale sempre 0 } document.write("</TABLE>"); } for (lista_mesi=0; lista_mesi<=11; lista_mesi++) { id_tab=lista_mesi+"xxx" document.getElementById(id_tab).style.position="relative" document.getElementById(id_tab).style.left="100px" document.getElementById(id_tab).style.top="100px" } </script> </body> </html>
Cioè ho eliminato il CSS del BOM tra <head> e </head> e, alla fine del ciclo che scrive le table dei vari mesi, ho scritto un altro ciclo per richiamarle, usando il DOM, cioè usando document.get ElementById()
for (lista_mesi=0; lista_mesi<=11; lista_mesi++)
{
id_tab=lista_mesi+"xxx"
document.getElementById(id_tab).style.position="re lative"
document.getElementById(id_tab).style.left="100px"
document.getElementById(id_tab).style.top="100px"
document.getElementById(id_tab).style.color="red"
}
ma ora, con il DOM, l’ id_tab di ogni table non viene visto e le varie table dei mesi non vengono né elaborate, né spostate.
Cosa posso fare per rendere l’identificatore id_tab=lista_mesi+”xxx” visibile a document.getElementById() per poter poi posizionare le table a 2 o più colonne? Grazie.
lanvoel

Rispondi quotando