Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    className più di una sola volta (x un semplicissimo cms)

    Ciao a tutti...

    la parentesi del titolo è forse troppo pretenziosa...
    intendevo solo che vorrei avere una serie di tasti che mi applicano delle classi ai vari elementi della pagina scelti per ID... (mi sarebbe utile per testare alcune combinazioni di css... ma il perché forse importa poco)

    sono un principiante di js... quindi riesco a fare solo ciò che vedete di seguito...
    FUNZIONA...
    ma come potete notare, poiché ogni classe applicata sovrascive la precedente... per combinare due classi devo "barare", impostando un className="classeuno classedue"...

    UNO: è possibile invece fare in modo che ogni classe si aggiunga alla precedente invece di sostituirla?

    (due: certo che poi per tornare indietro ed eliminare una classe applicata... VVoVe: )
    va bè... un passo alla volta... anche perché è un esperimento di autodidattica della domenica

    Chi mi da qualche consiglio?
    grazie

    codice:
    <html><head>
    <style type="text/css"> 
    .base {background:#999999}
    .verde {background: #00FF00}
    .bordorosso {border:2px solid #FF0000}
    </style>
    
    <SCRIPT>
    function CambiaClasse_1() {
    	var CLASSE = document.getElementById("boxmutevole")
    	CLASSE.className="verde"
    }
    function CambiaClasse_2() {
    	var CLASSE_2 = document.getElementById("boxmutevole")
    	CLASSE_2.className="bordorosso"
    }
    function CambiaClasse_3() {
    	var CLASSE_3 = document.getElementById("boxmutevole")
    	CLASSE_3.className="verde bordorosso"
    }
    </SCRIPT>
    
    </head><body>
    
    <div id="boxmutevole" class="base">contenuto di un div a cui cambia la presentazione</div>
    
    sfondo verde  :: 
    bordo rosso :: 
    sfondo verde e bordo rosso 
    
    </body></html>
    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

  2. #2
    uno sviluppo...

    ho trovato questo scriptino che dovrebbe fare proprio al caso mio...

    l'ho provato ad usare, classe ulteriore però aggiunge alla classe attuale solo un undefined (me ne accorgo spiandolo con firebug)...

    cosa e dove devo definire perché non sia undefined ma una classe? :master:

    codice:
    function addClassName (id, classname) {
       var e;
       if (typeof(id) == 'string') {e = this.getElementById(id);} 
       else {e = id;}
    
       if (!e || typeof e.className != 'string') {
          throw "Cannot add class to element " + id;
       }
    
       /* Check if the class is already there */
       if (!e.className.match(new RegExp('\\b' + classname + '\\b'))) {
          e.className += ' ' + classname;
       }
    }
    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

  3. #3
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Come si evince dalla funzione :

    onclick="addClassName(boxmutevole,'nomeDellaClasse DaAggiungere');"

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  4. #4
    a parte i dovuti ringraziamenti... (ma perché non ci arrivo mai da solo?!?! )

    e per eliminare una classe aggiunta? VVoVe:

    è troppo complesso?
    o potrei fare tipo un onDblClick="" che annulla? o giù di lì?

    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

  5. #5
    Per non farla troppo lunga...
    chi mi posta due righe in risposta alla domanda in rosso?

    grazie in anticipo e comunque


    e per eliminare una classe aggiunta?
    se riuscissi a fare anche questa cosa, avrei finito... ma naturalmente senza l'aiuto di qualcuno di voi è fuori dalla mia portata...

    però google mi trovato questo .js che sembra promettere bene, eccolo: Javascript Manipulate Class Names

    promette di svolgere le seguenti operazioni:

    function HasClassName(objElement, strClass)

    function AddClassName(objElement, strClass, blnMayAlreadyExist)

    function RemoveClassName(objElement, strClass)




    Ma io objElement non so come richiamarlo...

    destra

    cosa ci va al posto del bold per far lavorare la funzione che segue e cancellare la classe DESTRA?


    Oppure non ho capito una semplice e lo script Javascript Manipulate Class Names è di tutt'altra natura?


    codice:
       // ----------------------------------------------------------------------------
       // RemoveClassName
       //
       // Description : removes a class from the class attribute of a DOM element
       //    built with the understanding that there may be multiple classes
       //
       // Arguments:
       //    objElement              - element to manipulate
       //    strClass                - class name to remove
       //
    function RemoveClassName(objElement, strClass)
       {
    
       // if there is a class
       if ( objElement.className )
          {
    
             // the classes are just a space separated list, so first get the list
             var arrList = objElement.className.split(' ');
    
          // get uppercase class for comparison purposes
          var strClassUpper = strClass.toUpperCase();
    
          // find all instances and remove them
          for ( var i = 0; i < arrList.length; i++ )
             {
    
                // if class found
                if ( arrList[i].toUpperCase() == strClassUpper )
                {
    
                // remove array item
                arrList.splice(i, 1);
    
                // decrement loop counter as we have adjusted the array's contents
                i--;
    
                   }
       
             }
    
          // assign modified class name attribute
          objElement.className = arrList.join(' ');
    
          }
       // if there was no class
       // there is nothing to remove
       
          }
       // 
       // RemoveClassName
       // ------------------------------------------------------------------
    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

  6. #6
    Risolto!!!
    ma mica da solo... mi hanno dato una mano su un altro forum...

    Ad ogni modo... per la serie "si faccia una domanda e si dia una risposta":
    destra

    cosa ci va al posto del bold per far lavorare la funzione che segue e cancellare la classe DESTRA?
    Per far lavorare la funzione agendo sull'elemento stesso basta inserire:
    onclick="AddClassName(this,'destra')"

    Per far lavorare la funzione agendo su un elemnto scelto in base all'ID:
    onclick="AddClassName(document.getElementById('TAR GET_ID'),'destra')"

    Allo stesso modo, cambiando funzione (RemoveClassName oppure HasClassName) per eseguire le altre operazioni... con le quali si può impostare, ad esempio, un cosa del genere:
    codice:
    	if(hasClass(elementId,'destra')) {
    		removeClass(elementId,'destra');
    	} else {
    		addClass(elementId,'destra');
    	}
    }
    E allora ecco ottenuto ciò che chiedevo in apertura della discussione: un sistema che mi fa applicare (e levare) diverse classi ad un elemento...

    Lascio la demo che segue se dovesse far comodo a qualcuno (per me è stato un ottimo esercizio), ma fa uso di una versione semplificata dello script del precedente post...

    Salva con nome e apri col browser... buonanotte a tutti,

    codice:
    <html><head>
    <style type="text/css">
    .display {width:800px;height:200px;background:#FFFFCC;border:1px solid #ff0000; margin:auto}
    .box {width:300px;height:100px;background:#CCFF00;border:1px solid #FF6600; float:none; margin:auto;}
    .active {background:#99FF00}
    
    .destra {float:right;}
    .sinistra {float:left;}
    </style>
    <script type="text/javascript">
    function hasClass(ele,cls) {
    	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
    }
    
    function addClass(ele,cls) {
    	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
    }
    
    function removeClass(ele,cls) {
    	if (hasClass(ele,cls)) {
    		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
    		ele.className=ele.className.replace(reg,' ');
    	}
    }
    
    	
    // a destra
    function highlightStandardDestra(elementId) {
    	
    	var elementId = document.getElementById(elementId);
    	
    	if(hasClass(elementId,'destra')) {
    		removeClass(elementId,'destra');
    	} else {
    		addClass(elementId,'destra');
    	}
    }
    
    
    // a sinistra
    function highlightStandardSinistra(elementId) {
    	
    	var elementId = document.getElementById(elementId);
    	
    	if(hasClass(elementId,'sinistra')) {
    		removeClass(elementId,'sinistra');
    	} else {
    		addClass(elementId,'sinistra');
    	}
    }
    
    
    // bottone
    function highlightStandardBottone(elementId) {
    	
    	var elementId = document.getElementById(elementId);
    	
    	if(hasClass(elementId,'active')) {
    		removeClass(elementId,'active');
    	} else {
    		addClass(elementId,'active');
    	}
    }
    </script>
    </head><body>
    
    <div class="display">
    	<div id="myDiv" class="box">
    	usa i bottoni per posizionarmi
    	</div>
    </div>
    
    <hr style="clear:both" />
    
    <div style="width:45%;float:left; background:#FFFFCC; border:1px solid #FF0000">
    <input type="button" id="bottone2" onclick="highlightStandardSinistra('myDiv'); highlightStandardBottone('bottone2');" value="a sinistra" />
    al click attiva una classe che dichiara il box float:left e manda il box a sinistra...
    al RIclick disattivi la classe che hai attivato...
    </div>
    <div style="width:45%;float:right; background:#FFFFCC; border:1px solid #FF0000">
    <input type="button" id="bottone1" onclick="highlightStandardDestra('myDiv'); highlightStandardBottone('bottone1');" value="a destra" />
    al click attiva una classe che dichiara il box float:right e manda il box a destra...
    al RIclick disattivi la classe che hai attivato...
    </div>
    
    <hr style="clear:both" />
    
    
    
    memo: a seconda della posizione che occupa nel css rispetto all'altra, una classe applicata per seconda può non aver effetto: in questo caso se il box lo mandi a sinistra e poi aggiungi la classe per mandarlo a destra, non ti riesce (i css sono stili a cascata, quindi la successiva ( .sinistra {float:left;} ) avrà priorità sulla precedente ( .destra {float:right;} )... basta un pizzico di logica...): ma il sistema funziona: basta disattivare la classe sinistra e il box andrà a collocarsi correttamente a destra perchè agirà solo il float:right...</p>
    
    
    
    memo2: occhio al css che è stato scritto al volo... fuori da FF potrebbe fare casini...</p>
    
    </body></html>
    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

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.