Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. [Jquery] Ripetere funzione con elementi diversi
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • C
      cla83 User Attivo • 25 gen 2013, 12:56 ultima modifica di

      [Jquery] Ripetere funzione con elementi diversi

      Ciao a tutti,
      Ho il seguente script che mi aggiunge una classe su un elemento <li> in base all'altezza di un div,
      come posso fare per evitare di ripetere il codice?

      
      $(window).live('change', resizeFrame);
      
      function resizeFrame() { 
      var divHeight = $('li#nomeA').outerHeight();
      if(divHeight > 30) { $('li#nomeA > a').addClass('Selezionato');} else { $('li#nomeA > a').removeClass('Selezionato'); } } setInterval(resizeFrame, 150);
      
      function resizeFrame2() { 
      var divHeight = $('li#nomeB').outerHeight();
      if(divHeight > 30) { $('li#nomeB > a').addClass('Selezionato');} else { $('li#nomeB > a').removeClass('Selezionato'); } } setInterval(resizeFrame2, 150);
      
      

      grazie!

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
        Caricamento altri post
        Rispondi
        • Topic risposta
        Effettua l'accesso per rispondere
        • Da Vecchi a Nuovi
        • Da Nuovi a Vecchi
        • Più Voti
         

      • C
        cla83 User Attivo • 19 mar 2013, 14:01 ultima modifica di

        Ciao a tutti,
        putroppo ancora non ho trovato una soluzione per rendere più pulito e semplice questo codice, qualcuno può aiutarmi?

        grazie!

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • F
          francesco.di.caprio User Attivo • 19 mar 2013, 21:50 ultima modifica di
          
          $(window).live('change', resizeFrame);
          var frames = ["#nomeA", "#nomeB", "#nomeC", "#nomeD"];
          $.each(frames, function() {
              var divHeight = $('li' + this).outerHeight();
              if(divHeight > 30) {
                  $('li' + this + ' > a').addClass('Selezionato');
              } else {
                  $('li' + this + ' > a').removeClass('Selezionato');
              }
          });
          
          

          metti tutti i nomi in un array e poi li scorri con un $.each(). L'attuale valore a cui sta puntando il ciclo nell'array è rappresentato da this. La funzione setInterval() l'ho rimossa... a che ti serve se hai messo in live() l'evento change?

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • C
            cla83 User Attivo • 19 mar 2013, 23:16 ultima modifica di

            @Francesco Di Caprio said:

            metti tutti i nomi in un array e poi li scorri con un $.each(). L'attuale valore a cui sta puntando il ciclo nell'array è rappresentato da this. La funzione setInterval() l'ho rimossa... a che ti serve se hai messo in live() l'evento change?

            Ciao Francesco,
            grazie mille per l'aiuto.
            A dire la verità ho modificato questo script trovato in rete h t t p : //jsbin.com/ewiko4/8/edit che calcola l'altezza di un div.
            Ho provato lo script da te postato ma non funziona, vedo che c'è ancora il richiamo della funzione set interval resizeframe in questo punto: $(window).live('change', resizeFrame);
            L'ho eliminata però in quel caso mi aggiunge le classi direttamente.

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • C
              cla83 User Attivo • 20 mar 2013, 12:38 ultima modifica di

              Questo è un esempio funzionante con il mio codice h t t p ://gd83.altervista.org/example/
              giusto per dare un'idea di quello che voglio realizzare.

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • F
                francesco.di.caprio User Attivo • 20 mar 2013, 16:28 ultima modifica di

                Ma tu hai chiesto come fare per evitare di ripetere due volte lo stesso codice, non come fare per aumentare l'altezza di un div se viene cliccato. Spiega bene cosa vuoi fare e poi vediamo come farlo. Per aumentare l'altezza di un div, l'oggetto window non ti serve.

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • C
                  cla83 User Attivo • 21 mar 2013, 09:26 ultima modifica di

                  @Francesco Di Caprio said:

                  Ma tu hai chiesto come fare per evitare di ripetere due volte lo stesso codice, non come fare per aumentare l'altezza di un div se viene cliccato. Spiega bene cosa vuoi fare e poi vediamo come farlo. Per aumentare l'altezza di un div, l'oggetto window non ti serve.

                  Ciao Francesco, si quello che volevo é proprio quello di riscrivere quella parte di codice senza ripeterla.
                  In teoria a me non serve aumentare l'altezza del div, ma di aggiungere la classe 'selected' all'attributo href quando l'elemento 'li' supera i 30px di altezza.
                  Il menù cliccabile che cambia l'altezza è fittizio, non c'entra con quello che devo realizzare è solo una simulazione per mostrare il funzionamento del codice da me postato.

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • C
                    cla83 User Attivo • 21 mar 2013, 10:39 ultima modifica di

                    Con questo esempio qui forse è più chiaro, in effetti mi sono spiegato proprio male :rollo:

                    Però quello che vorrei migliorare è solo il codice da me postato inizialmente,
                    il resto non è da calcolare sia perché è solo una simulazione del codice reale e sia perché non ho la possibilità di modificare il sorgente orginale
                    il sorgente html e js, ma solo il mio blocco di codice.

                    Il tutto funziona correttamente, infatti quando la lista supera i 25px si aggiunge la classe 'Selected' all'attributo href.

                    ecco l'esempio :

                    h t t p : / / gd83.altervista.org/example2/

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • C
                      cla83 User Attivo • 26 apr 2013, 15:00 ultima modifica di

                      Sono riuscito a realizzare lo script con l'aiuto di Francesco (grazie!),
                      come potrei semplificare ancora il codice agendo direttamente sull'elemento li
                      senza specificare l'id?

                      grazie!

                      [HTML]

                      function resizeFrame() {
                      var frames = []; for (var i = 149, l = 1000; i < l; i++) {
                      frames.push(i);}
                      $.each(frames, function() {
                      var divHeight = $('li#' + this).outerHeight();

                      if (divHeight > 30) {   
                      

                      $('li#' + this + ' > a').addClass('Selected');
                      } else {
                      $('li#' + this + ' > a').removeClass('Selected');
                      }
                      });
                      }
                      setInterval(resizeFrame, 150);

                      <ul id="tree">
                      <li id ="150"> <a href="#">nameA</a>
                      <ul><li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      </ul>
                      </li>
                      <li id ="250"> <a href="#">nameB</a>
                      <ul> <li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      </ul>
                      </li>

                      <li id ="980"> <a href="#">nameC</a>
                      <ul><li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      <li>Item</li>
                      </ul>
                      </li>
                      </ul>[/HTML]

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • F
                        francesco.di.caprio User Attivo • 26 apr 2013, 16:48 ultima modifica di

                        Usando come selettore il tag, piuttosto che un id, agisci su tutti i tag. Con $("ul#tree li"), agisci su tutti i LI che sono figli dell'UL con ID "tree".

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • C
                          cla83 User Attivo • 26 apr 2013, 19:02 ultima modifica di

                          @Francesco Di Caprio said:

                          Usando come selettore il tag, piuttosto che un id, agisci su tutti i tag. Con $("ul#tree li"), agisci su tutti i LI che sono figli dell'UL con ID "tree".

                          Ho provato a modificare il codice in questo modo ma non funziona 😞

                          [HTML]
                          $("#tree li").each(function() {
                          var divHeight = $('li').outerHeight();
                          if (divHeight > 30) {
                          $('li > a').addClass('Selected');
                          } else {
                          $('li > a').removeClass('Selected');
                          }
                          });
                          }
                          setInterval(resizeFrame, 150);[/HTML]

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • F
                            francesco.di.caprio User Attivo • 26 apr 2013, 19:50 ultima modifica di

                            Cosa devi modificare, i li che sono sotto #tree, oppure i li che sono sotto l'ul che sta sotto?

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • C
                              cla83 User Attivo • 27 apr 2013, 11:03 ultima modifica di

                              @Francesco Di Caprio said:

                              Cosa devi modificare, i li che sono sotto #tree, oppure i li che sono sotto l'ul che sta sotto?

                              I tag li che sono sotto che stanno sotto l'ul tree, cioè quelli che nel codice html hanno l'id.

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              • C
                                cla83 User Attivo • 29 apr 2013, 09:32 ultima modifica di

                                Ho modificato il codice in questo modo, ma applica la classe 'Selected' a tutti i tag a

                                [HTML]
                                function resizeFrame() {

                                $("ul#tree li").each(function() {       
                                
                                 var divHeight = $('ul#tree li').outerHeight();
                                
                                       if (divHeight > 30) { 
                                
                                           $('ul#tree li > a').addClass('Selected');
                                
                                        } else {
                                
                                            $('ul#tree li > a').removeClass('Selected');
                                
                                        }   
                                
                                }); 
                                

                                }
                                setInterval(resizeFrame, 50);[/HTML]

                                0 Miglior Risposta Ringrazia Cita Rispondi

                                  1 Risposta Ultima Risposta
                                Caricamento altri post
                                Rispondi
                                • Topic risposta
                                Effettua l'accesso per rispondere
                                • Da Vecchi a Nuovi
                                • Da Nuovi a Vecchi
                                • Più Voti