2010-01-15 13 views
5

Tentativo di utilizzare JQuery per scorrere un elenco ul li usando la classe next e la classe prev e.g.JQuery ul li select list

<ul class="selectoption"> 
    <li> Item 1</li> 
    <li> Item 2</li> 
    <li> Item 3</li> 
    <li> ... </li> 
</ul> 
<a href="" class="next">Next</a> 
<a href="" class="prev">Back</a> 

L'unica cosa è che voglio solo che il li selezionato sia visibile. Quindi in qualche modo bisogno di indicizzare i li? Aiuta molto apprezzato - grazie in anticipo

risposta

9

Questo dovrebbe farlo:

// Hide all but the first 
$('.selectoption li').not(':first').hide(); 

// Handle the click of prev and next links 
$('.prev, .next').click(function() { 
    // Determine the direction, -1 is prev, 1 is next 
    var dir = $(this).hasClass('prev') ? -1 : 1; 
    // Get the li that is currently visible 
    var current = $('.selectoption li:visible'); 

    // Get the element that should be shown next according to direction 
    var new_el = dir < 0 ? current.prev('li') : current.next('li'); 

    // If we've reached the end, select first/last depending on direction 
    if(new_el.size() == 0) { 
     new_el = $('.selectoption li:'+(dir < 0 ? 'last' : 'first')); 
    } 

    // Hide them all.. 
    $('.selectoption li').hide(); 
    // And show the new one 
    new_el.show(); 

    // Prevent the link from actually redirecting the browser somewhere 
    return false; 
}); 
+0

Ciao Tatu Ulmanen, grazie per questo funziona bene con una leggera modifica - if (next.size() == 0) {next = dir == 'prev'? $ ('. selectoption li: first'): $ ('. selectoption li: first'); } - interrompe il pulsante prev dalla creazione di una voce nul. – russell

+0

@russell, dovrebbe funzionare, ma in caso contrario, la tua modifica può essere semplificata in 'if (next.size() == 0) {next = $ ('. Selectoption li: first'); } ', non è necessario il condizionale interno. Ma buono se ha funzionato per te, non dimenticare di segnare la risposta accettata allora :) –

0

Se volete che il vostro indice, utilizzare il seguente:

$("#selectoption>li").click(function(){ 
    alert($(this).index()); 
}); 

Anche se vorrei guardare la risposta di Tatu Ulmanen invece.

2

Prova qualcosa di simile:

$(function(){ 
    // initialization 
    $(".selectoption").data("index",1).find("li:not(:first)").hide(); 

    // previous 
    $(".previous").click(function(){ 
     $(".selectoption").data(
      "index", 
      $(".selectoption").data("index") - 1 
    ); 
     $(".selectoption li").hide().eq($(".selectoption").data("index")).show(); 
     return false; 
    }); 

    // next 
    $(".next").click(function(){ 
     $(".selectoption").data(
      "index", 
      $(".selectoption").data("index") + 1 
    ); 
     $(".selectoption li").hide().eq($(".selectoption").data("index")).show(); 
     return false; 
    })  
}); 

Con l'oggetto di dati in jQuery, è possibile associare qualsiasi tipo di dati JavaScript con un elemento DOM. Ho usato questo per salvare lo stato della lista.

È possibile aggiungere guardie per il primo e l'ultimo elemento nei passaggi successivi/precedenti.

Problemi correlati