Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644

    [Script] Attivare/disattiva un CSS

    Ciao, ho fatto il mio primo scrippettino DOM che al primo click carica un foglio di stile e al secondo lo disattiva.

    Apparentemente funziona, ma vi volevo chiedere una opinione sullo stile di scrittura del codice: è un po' contorto? nell'onclick=function è normale mettere tanta roba (andrebbe aggiunto anche il codice per settare il cookie)? O è meglio spostare in un'altra funzione?


    HTML:
    codice:
    <ul id="jsmenu">[*]Impaginazione per piccoli schermi[/list]
    Script:
    Codice PHP:
    function addcss(){
        var 
    la;
        
    document.getElementById("jsmenu").getElementsByTagName("a")[0];
        
    l=document.createElement("link");
        
    l.setAttribute("type","text/css");
        
    l.setAttribute("rel","stylesheet");
        
    l.setAttribute("media","all");
        
    document.getElementsByTagName("head")[0].appendChild(l);
        
    change(l,a);
    }
    function 
    change(l,a){
        var 
    urlshati;
        
    sh a.href;
        
    a.href="#";
        if(/
    modif/.test(a.className)){
            
    a.onclick = function(){
                                    
    l.removeAttribute("href");
                                    
    a.className "init";
                                    
    a.href sh;
                                    
    a.replaceChild(document.createTextNode('Impaginazione per piccoli schermi'), a.firstChild);
                                    
    change(l,a);
            };
        } else {
            
    url sh.substring(sh.indexOf("=")+1sh.length);
            
    a.onclick = function(){
                                    
    l.setAttribute("href",url);
                                    
    a.className "modif";
                                    
    a.href sh;
                                    
    a.replaceChild(document.createTextNode('Impaginazione a due colonne'), a.firstChild);
                                    
    change(l,a);
            };
        }
    }
    window.onload=addcss

  2. #2
    Ti dico quali sono le cose secondo me migliorabili, in seguito a quanto riscontrato durante la lettura del tuo script:
    1. i nomi delle variabili; che ne dici di usare nomi magari un po' più lunghi, ma maggiormente descrittivi?
    2. l'ordine delle funzioni; visto che addcss() richiama change(), non credi sia più intuitivo mantenere l'ordine di 'nascita' anche nel codice?
    3. vedo due porzioni di codice (negli onclick) parecchio simili: forse si potrebbe provare a condensarle in un'unica funzione, richiamabile con argomenti diversi.


  3. #3
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Grazie Piero

  4. #4
    No, no, che 'grazie'. Correggi, veloce, che poi torniamo a ragionarci su.

  5. #5
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Originariamente inviato da pierofix
    No, no, che 'grazie'. Correggi, veloce, che poi torniamo a ragionarci su.
    è che mi convince solo il punto "C"

  6. #6
    Utente di HTML.it L'avatar di iguane
    Registrato dal
    Sep 2001
    Messaggi
    1,633
    Originariamente inviato da span
    è che mi convince solo il punto "C"

    Il solito pirla

    ...I'm insane in the brain...

  7. #7

  8. #8
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Originariamente inviato da pierofix
    Parliamone.
    sto provando a semplificarla, ma più vado avanti più mi sembra incasinata

  9. #9
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Tipo questa... non si può considerare propriamente una semplificazione, giusto?

    Codice PHP:
    function addlink(){
    // Crea un elemento LINK, e prende l'elemento Ancor su cui applicare gli eventi
        
    var linka;
        
    document.getElementById("jsmenu").getElementsByTagName("a")[0];
        
    link=document.createElement("link");
        
    link.setAttribute("type","text/css");
        
    link.setAttribute("rel","stylesheet");
        
    link.setAttribute("media","all");
        
    document.getElementsByTagName("head")[0].appendChild(link);
        
    change(link,a);
    }
    function 
    change(link,a){
    // Individua quale deve essere l'azione dell'ancora in base alla classe
    // e richiama la funzione opportuna
        
    var cssfilestarthrefi;
    // Salva l'attributo HREF prima di rimpiazzarlo con #
    // sarà da ripassare a questa funzione ogni volta, per ricavare il nome del file CSS
        
    starthref a.href;
        
    a.href="#";
    // Verifica se la classe dell'ancora è "modif" (il file CSS è stato caricato) o "init"
        
    if(/modif/.test(a.className)){
            
    a.onclick = function(){ removeCss(link,a,starthref) };
        } else {
    // Ricava il nome del file CSS dal href dell'ancora
            
    cssfile starthref.substring(starthref.indexOf("=")+1starthref.length);
            
    a.onclick = function(){ addCss(link,cssfile,a,starthref) };
        }
    }
    function 
    removeCss(link,a,starthref){
    // Rimuove l'attributo href in LINK, cambia la classe ed il testo del link e ritorna
    // alla funzione change()
        
    link.removeAttribute("href");
        
    a.className "init";
        
    a.href starthref;
        
    a.replaceChild(document.createTextNode('Impaginazione per piccoli schermi'), a.firstChild);
        
    change(link,a);
    }
    function 
    addCss(link,cssfile,a,starthref){
    // Setta l'attributo href in LINK, cambia la classe ed il testo del link e ritorna
    // alla funzione change()
        
    link.setAttribute("href",cssfile);
        
    a.className "modif";
        
    a.href starthref;
        
    a.replaceChild(document.createTextNode('Impaginazione a due colonne'), a.firstChild);
        
    change(link,a);


    window.onload=addlink

  10. #10
    Utente di HTML.it L'avatar di span
    Registrato dal
    Jan 2004
    Messaggi
    1,644
    Originariamente inviato da pierofix
    1. l'ordine delle funzioni; visto che addcss() richiama change(), non credi sia più intuitivo mantenere l'ordine di 'nascita' anche nel codice?
    a e c ci ho provato, in questo punto non sono convinto, prima crea l'elemento LINK, poi chiama la funzione descritta appena sotto... no?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.