Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Reale_Augello
    Guest

    [Augello's pillola] Un'occhiata al DOM

    Salve a tutti,

    come va ? Tutto bene ?
    Vorrei proporvi del codice che ho scritto per iniziare la mia (spero proficua) esplorazione del DOM, il Document Object Model che consente di generare e manipolare elementi HTML per la creazione di pagine Web dinamiche (finalmente nel vero senso della parola). Ovviamente, mi sento in dovere di citare le mie fonti di 'ispirazione'. Ecco un pò di link:

    http://pro.html.it/articoli/id_227/idcat_33/pro.html
    http://www.w3c.org/DOM/

    Il codice che ho scritto non fa un granchè ed è molto semplice.
    Permette di creare una tabella dal nulla, impostandone tutti i parametri rilevanti (numero di righe e colonne, larghezza ecc.). Ad un occhio attento si noterà come il codice possa essere facilmente potenziato e adattato a qualsiasi esigenza contestuale. Ad esempio, sarebbe stato possibile immettere un controllo sul valore dei dati immessi dall'utente, impostare controlli per le varie prompt e molto altro.

    OK, iniziamo l'analisi del codice !

    Ho creato una semplice funzione JavaScript che ho chiamato GeneraTabella:

    codice:
    <script language="JavaScript" type="text/javascript">
    <!--
    function GeneraTabella() {
    if (document.createElement && document.getElementsByTagName) {
    form=document.mioform;
    In questo modo, con l'if che leggete, posso capire se il browser supporta alcuni dei metodi basilari proposti dal DOM: in caso negativo verrà visualizzato un semplice avviso circa l'impossibilità di eseguire la funzione. Dopodichè associo alla variabile 'form' il nome del form che contiene i campi dai quali ricavo i parametri per la tabella.

    codice:
    if (form.attiva.value=='Crea!') {
    form.attiva.value='Elimina!';
    nrighe=form.nrighe.value;
    ncolonne=form.ncolonne.value;
    larghezza=form.vlarghezza.value+form.tlarghezza[form.tlarghezza.selectedIndex].value;
    if (form.tlarghezza[form.tlarghezza.selectedIndex].value=='px')
    larghezzacella=Math.floor(form.vlarghezza.value/ncolonne)+'px';
    else
    larghezzacella=Math.floor(form.vlarghezza.value/ncolonne)+'%';
    bordo=form.bordo.value+'px';
    marginecelle=form.mcelle.value;
    spaziocelle=form.scelle.value;
    Questa porzione di codice consente di acquisire, in apposite variabili, i dati della tabella, immessi dall'utente.

    codice:
    tabella=document.createElement('TABLE');
    corpo=document.getElementsByTagName('BODY').item(0);
    corpotab=document.createElement('TBODY');
    Ecco il DOM in azione: ho creato un elemento TABLE, ho ricavato un riferimento al tag BODY e, infine, ho creato un TBODY, il 'corpo' della tabella che stiamo creando. Dunque, grazie al metodo createElement siamo in grado di creare un'istanza di qualsiasi elemento HTML semplicemente specificandone il tag. Il metodo getElementsByTagName, invece, restituisce un array contenente tutti gli elementi della pagina contraddistinti da un certo tag. Nel nostro caso, con .item(0) accedo al primo elemento di tale vettore, che contiene un riferimento al tag BODY, unico del suo genere in una pagina Web.

    codice:
    for (i=0; i<nrighe; i++) {
    riga=document.createElement('TR');
    for (j=0; j<ncolonne; j++) {
    cella=document.createElement('TD');
    cella.setAttribute('width',larghezzacella);
    attributo=prompt('Caratteristiche della '+(j+1)+'ª cella della '+(i+1)+'ª riga.\nTesto:');
    testo=document.createTextNode(attributo);
    cella.appendChild(testo);
    attributo=prompt('Sfondo:');
    cella.setAttribute('bgColor',attributo);
    attributo=prompt('Allineamento:');
    cella.setAttribute('align',attributo);
    attributo=prompt('Altezza:');
    cella.setAttribute('height',attributo);
    riga.appendChild(cella);
    }
    corpotab.appendChild(riga);
    }
    Questi due cicli for innestati rappresentano il cuore della funzione. Quello esterno si occupa di creare le righe (tag TR), mentre quello interno fa lo stesso con le colonne (tag TD). Il metodo appendChild consente di appendere letteralmente un elemento a un altro andando a creare una vera e propria struttura gerarchica, mentre setAttribute consente di manipolare un attributo specifico di un qualsivoglia elemento HTML Al termine di ogni iterazione del ciclo interno, dunque, la cella creata viene 'appesa' alla riga, e poi il ciclo esterno passa alla sua nuova iterazione. Alla fine di entrambi i cicli, avremo in 'corpotab' tutto il contenuto della tabella.

    codice:
    tabella.setAttribute('width',larghezza);
    tabella.setAttribute('border',bordo);
    tabella.setAttribute('cellSpacing',spaziocelle);
    tabella.setAttribute('cellPadding',marginecelle);
    tabella.appendChild(corpotab);
    corpo.appendChild(tabella);
    }
    Impostiamo larghezza, bordo, cellspacing e cellpadding della tabella che stiamo creando. Dopodichè, appendiamo 'corpotab' a 'tabella' e la stessa 'tabella' a 'corpo', il riferimento al tag BODY.

    codice:
    else {
    form.attiva.value='Crea!';
    document.getElementsByTagName('BODY').item(0).removeChild(tabella);
    }	
    }
    Quest'else sta a indicare che abbiamo già attivato la funzione e che, dunque, abbiamo già creato la tabella. Convertiamo allora il value del pulsante in 'Crea!' ed eliminiamo il figlio 'tabella' dal riferimento al tag BODY. In questo modo siamo pronti per creare un'altra tabella.

    codice:
    else alert('Spiacente, il tuo browser non supporta lo standard DOM.');
    }	
    //-->
    </script>
    La funzione finisce con il messaggio citato in precedenza.
    Ecco l'interno codice della funzione:

    codice:
    <script language="JavaScript" type="text/javascript">
    <!--
    function GeneraTabella() {
    if (document.createElement && document.getElementsByTagName) { // controllo accesso alle funzionalità DOM
    form=document.mioform;
    if (form.attiva.value=='Crea!') {
    form.attiva.value='Elimina!';
    nrighe=form.nrighe.value;
    ncolonne=form.ncolonne.value;
    larghezza=form.vlarghezza.value+form.tlarghezza[form.tlarghezza.selectedIndex].value;
    if (form.tlarghezza[form.tlarghezza.selectedIndex].value=='px')
    larghezzacella=Math.floor(form.vlarghezza.value/ncolonne)+'px';
    else
    larghezzacella=Math.floor(form.vlarghezza.value/ncolonne)+'%';
    bordo=form.bordo.value+'px';
    marginecelle=form.mcelle.value;
    spaziocelle=form.scelle.value;
    tabella=document.createElement('TABLE');
    corpo=document.getElementsByTagName('BODY').item(0);
    corpotab=document.createElement('TBODY');
    for (i=0; i<nrighe; i++) {
    riga=document.createElement('TR');
    for (j=0; j<ncolonne; j++) {
    cella=document.createElement('TD');
    cella.setAttribute('width',larghezzacella);
    attributo=prompt('Caratteristiche della '+(j+1)+'ª cella della '+(i+1)+'ª riga.\nTesto:');
    testo=document.createTextNode(attributo);
    cella.appendChild(testo);
    attributo=prompt('Sfondo:');
    cella.setAttribute('bgColor',attributo);
    attributo=prompt('Allineamento:');
    cella.setAttribute('align',attributo);
    attributo=prompt('Altezza:');
    cella.setAttribute('height',attributo);
    riga.appendChild(cella);
    }
    corpotab.appendChild(riga);
    } 
    tabella.setAttribute('width',larghezza);
    tabella.setAttribute('border',bordo);
    tabella.setAttribute('cellSpacing',spaziocelle);
    tabella.setAttribute('cellPadding',marginecelle);
    tabella.appendChild(corpotab);
    corpo.appendChild(tabella);
    }
    else {
    form.attiva.value='Crea!';
    document.getElementsByTagName('BODY').item(0).removeChild(tabella);
    }	
    }
    else alert('Spiacente, il tuo browser non supporta lo standard DOM.');
    }	
    //-->
    </script>
    Sicuramente vi saranno problemi (soprattutto in termini di indentazione) nella lettura del codice.
    Per ovviare a ciò, vi consiglio di visitare la pagina che ho creato all'occorrenza, dove potete trovare lo script funzionante:

    http://www.antoniofittipaldi.it/creatabella.htm

    Spero di aver fatto cosa gradita !
    Aspetto numerose segnalazioni di bug, correzioni, proposte di miglioramenti...

    Personalmente sono molto affascinato da questo modo di 'fare Web'. E voi ?

    Un saluto caloroso a tutti e alla prossima !

  2. #2
    Bella pillola,
    prima o poi noi sviluppatori non potremo fare a meno di confrontarci con le problematiche e le suggestioni connesse al DOM.

    Da studiare lentamente...


    Eccoti!

  3. #3
    Reale_Augello
    Guest

    ...

    Originariamente inviato da IMMANUEL_KANT
    Bella pillola,
    prima o poi noi sviluppatori non potremo fare a meno di confrontarci con le problematiche e le suggestioni connesse al DOM.

    Da studiare lentamente...


    Noi ?

    Grazie mille, comunque !

  4. #4
    Suvvia, non ti buttare giù. Sei una giovane speranza
    Eccoti!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    3,259

    Re: [Augello's pillola] Un'occhiata al DOM

    Originariamente inviato da Reale_Augello
    Personalmente sono molto affascinato da questo modo di 'fare Web'. E voi ?

    ciauz:
    chiedilo a blakwolf

    cmq veramente un buon lavoro! scritto e spiegato bene


    ps: potresti unirti nel team della libreria dei forumisti...

  6. #6
    Reale_Augello
    Guest

    Grazie...

    ... mille Dennis, come al solito troppo gentile.

    Non credo di essere all'altezza del team che avete creato... e poi ho il fattore tempo che rema contro...

  7. #7

    Re: Re: [Augello's pillola] Un'occhiata al DOM

    Originariamente inviato da Dennis
    chiedilo a blakwolf
    che vuol dire
    Luca Mascaro
    Usability e Accessibility Engineer, User Interface Designer/Engineer
    NOW BLOG
    W3C HTML & WCAG WG Member for IWA/HWG

  8. #8

    Re: Re: [Augello's pillola] Un'occhiata al DOM

    Originariamente inviato da Dennis
    chiedilo a blakwolf
    che vuol dire

    comunque complimenti, davvero un ottimo lavoro
    Luca Mascaro
    Usability e Accessibility Engineer, User Interface Designer/Engineer
    NOW BLOG
    W3C HTML & WCAG WG Member for IWA/HWG

  9. #9
    Reale_Augello
    Guest

    Grazie...

    ... blakwolf, mi fa piacere ricevere tuoi complimenti.


  10. #10

    Re: Grazie...

    Originariamente inviato da Reale_Augello
    ... blakwolf, mi fa piacere ricevere tuoi complimenti.

    veramente ne sai più tu che io di DOM

    io al massimo lo so applicare bene

    Luca Mascaro
    Usability e Accessibility Engineer, User Interface Designer/Engineer
    NOW BLOG
    W3C HTML & WCAG WG Member for IWA/HWG

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.