[Javascript] addClass da un elemento in poi

AngelaM85

Nuovo Utente
6 Set 2016
9
0
1
38
Buon pomeriggio,
Sto cercando di creare n sistema Load More/Load Less in un sito

HTML:
<ul id="pf-list">
<li> ....</li>
<li>..</li>
<li class='hide'>..</li>
<li class='hide'>..</li>
<li id="pf-loadmore"><a href="#">Load More</a></li>
<li id="pf-loadless" style="display:none"><a href="#">Load Less</a></li>
 </ul>

I vari <li> vengono generati come risultato di una select dal db.
Vorrei sapere come posso aggiungere una classe (es. "hide") dal decimo <li> in poi quando scelgo loadless.

Ho fatto questo

Codice:
$('#pf-loadmore').click(function(event) {
             $('#pf-loadless').hide();
            $("li").removeClass("hide")
            
            return false;
        });  
   $('#pf-loadless').click(function(event) {
           
             $("li").addClass("hide")
           
     
            return false;
        });

Ma, ovviamente, questo codice va a nascondere/mostrare tutti gli elementi.
Grazie a chiunque possa aiutarmi, ho copiato poco codice sperando di esser stata comunque chiara.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, devi ciclare tutti i <li> con each() e fare un controllo l'indice
Codice:
$("li").each(function (i, e) {
                if (i > 9) {
                    $(e).addClass("hide");
                }
            })
attenta che verranno ciclati tutti i li della pagina. Se vuoi il controllo su una lista specifica devi cambiare il selettore
Codice:
$("ul#idelemento li").
 

AngelaM85

Nuovo Utente
6 Set 2016
9
0
1
38
Ho fatto le prove, adesso va perfettamente ...
Mi è sorto un altro dubbio ... e se volessi farlo a blocchi di 10 l'operazione?
Quindi vedo i primi 10 - load more - vedo altri 10 e così via?
Basta fare un for? tipo così:
Codice:
$("ul#pf-list .pf").each(function(i,e){
               for (i=0; i<10; i++){
                    $(e).removeClass("hide");
                    
                }
                }
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
436
73
28
Ciao, tieni conto che il metodo each() esegue già di per sé un ciclo in cui sono iterati tutti gli elementi restituiti da quello specifico selettore. Il tuo ciclo for, quindi, non ha molto senso inserito là dentro.

In generale è buona la soluzione di Criric, ma volendo essere più stringati, e anche in vista di questa tua nuova richiesta, ti consiglio l'uso del metodo slice().

Inoltre, personalmente, userei due bottoni al posto di quei due link, e andrei a disabilitarli o attivarli all'esigenza, anziché nasconderli.

Qui un esempio minimale ma concreto:
Codice:
<!doctype html>
<html lang="it">
  <head>
    <meta charset="utf-8">
    <title>esempio</title>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script type="text/javascript">
      $(function(){
   
        $('#pf-loadmore').click(function() {
          $('#pf-list>.hide').slice(0,10).removeClass('hide'); // mostra i prossimi 10 elementi che erano nascosti
          impostaPulsanti();
        });
     
        $('#pf-loadless').click(function() {
          $('#pf-list>:not(.hide)').slice(-10).addClass('hide'); // nasconde gli ultimi 10 elementi che erano visibili
          impostaPulsanti();
        });

        impostaPulsanti();
      });

      // Abilita/disabilita i pulsanti in base alla presenza o meno di elementi nascosti
      function impostaPulsanti(){
        $('#pf-loadmore').prop( 'disabled', !$('#pf-list>li.hide').length );
        $('#pf-loadless').prop( 'disabled', !$('#pf-list>li:not(.hide)').length );
      }
    </script>
    <style type="text/css">
      .hide{ display: none; }
    </style>
  </head>
  <body>
    <ul id="pf-list">
      <li>1..</li>
      <li>2..</li>
      <li>3..</li>
      <li>4..</li>
      <li>5..</li>
      <li>6..</li>
      <li>7..</li>
      <li>8..</li>
      <li>9..</li>
      <li>10..</li>
      <li>11..</li>
      <li>12..</li>
      <li>13..</li>
      <li>14..</li>
      <li>15..</li>
      <li class="hide">16..</li>
      <li class="hide">17..</li>
      <li class="hide">18..</li>
      <li class="hide">19..</li>
      <li class="hide">20..</li>
      <li class="hide">21..</li>
      <li class="hide">22..</li>
      <li class="hide">23..</li>
    </ul>
    <input type="button" id="pf-loadmore" value="Load More">
    <input type="button" id="pf-loadless" value="Load Less">
  </body>
</html>

In alternativa, a seconda di ciò che devi ottenere, potrebbe essere più efficiente una soluzione che prevede l'uso di Ajax per caricare letteralmente i contenuti al volo, anziché caricarli tutti inizialmente per poi nasconderli/mostrarli.

Se infatti si tratta di grandi quantità di contenuti, tale sistema permette di ridurre il tempo di caricamento iniziale, per ridistribuirlo man mano che si richiede specificatamente il caricamento dei contenuti.

Tale soluzione prescinde comunque dall'oggetto in discussione ed è, chiaramente, giusto un'ipotesi; poi valuterai tu cosa è meglio fare, in base alle tue esigenze.

Buon proseguimento :)
 

AngelaM85

Nuovo Utente
6 Set 2016
9
0
1
38
Buongiorno, grazie dell'aiuto.. In realtà mi devo inserire il tutto in un contesto già strutturato, che, per me che sono ancora alle prime armi, non è il massimo!... Ma a tirocinio questo mi hanno chiesto! ;)
In realtà mi hanno "consigliato" di fare così, al limite valuterò anche Ajax!
Adesso provo a capire il codice sopra! Grazie ancora!
 
Discussioni simili
Autore Titolo Forum Risposte Data
I Creare un banner temporaneo JavaScript Javascript 0
S Impossibile scorrere un oggetto in JavaScript Javascript 0
N Passare array da php a javascript PHP 5
L Quiz javascript funzionante da migliorare Javascript 0
P errore 404 con javascript Javascript 2
D aiuto funzioni javascript Javascript 1
M Upload immagine con javascript problemi con FormData() Javascript 1
L countdown multiplo javascript Javascript 1
S Problemi Javascript + Aruba Javascript 2
M Inviare un file su un server remoto con JavaScript Javascript 0
T a href="javascript:;" Javascript 1
F Creare elementi html con javascript Javascript 3
A pulsante di update campo mysql con javascript Javascript 2
8 Javascript - PDF Form Javascript 0
B javascript per problemi con pdf e Safari Javascript 0
N informazione javascript Programmazione 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
P javascript:document.forms Javascript 7
S Consiglio esercizio Javascript Javascript 2
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
P Passaggio id php a javascript PHP 6
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
E lettura da un Database con Javascript jQuery 2
V TRIS in javascript Javascript 1
IClaude Funzione Javascript Javascript 8
Alex_70 Javascript date color Javascript 3
F Convertire JavaScript per la compatibilità nei browser obsoleti Javascript 0
I Passare dei parametri in javascript PHP 0
Shyson Meglio Javascript o HTML? Javascript 4
G Problema verifica palindromo e verifica pari e dispari javascript Javascript 0
M Chiamare pagina php da javascript Javascript 8
M Errore JavaScript per php [objeto HTMLParagraphElement] PHP 0
D Javascript per il download dei dati Javascript 0
grgfede Problema javascript con aruba Javascript 1
R Cerco supporto in programmazione javascript Offerte e Richieste di Lavoro e/o Collaborazione 0
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
I javascript come caricare una pagina sopra quella corrente in automatico Javascript 2
L [Javascript] Problema salvataggio dati in db Javascript 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
G Quiz Javascript Javascript 4
A [Javascript] Scrittura su più campi contemporaneamente Javascript 18
F classic asp popolare combo box javascript Presentati al Forum 1
claudio_lorenzo [Javascript] aiuto su jquery per calcolo altezze dom Javascript 1
F [Javascript] comando innerHTML non funziona Javascript 5
alexice51 proggrammi per scrivere in javascript? Javascript 3
max1974 [Javascript] Accordion aria-exspanded Javascript 0
D [Javascript] salvare immagine canvas - paypal Javascript 0
O [Javascript] Conflitto Jquery: forse... Javascript 0
M [Javascript] Canvas js css Javascript 1

Discussioni simili