2009-12-13 3 views
15

Come posso convertire una lista non ordinata in questo formatoCome convertire la lista non ordinata nel menu a discesa elegante <select> utilizzando jquery?

<ul class="selectdropdown"> 
    <li><a href="one.html" target="_blank">one</a></li> 
    <li><a href="two.html" target="_blank">two</a></li> 
    <li><a href="three.html" target="_blank">three</a></li> 
    <li><a href="four.html" target="_blank">four</a></li> 
    <li><a href="five.html" target="_blank">five</a></li> 
    <li><a href="six.html" target="_blank">six</a></li> 
    <li><a href="seven.html" target="_blank">seven</a></li> 
</ul> 

in una discesa in questo formato

<select> 
    <option value="one.html" target="_blank">one</option> 
    <option value="two.html" target="_blank">two</option> 
    <option value="three.html" target="_blank">three</option> 
    <option value="four.html" target="_blank">four</option> 
    <option value="five.html" target="_blank">five</option> 
    <option value="six.html" target="_blank">six</option> 
    <option value="seven.html" target="_blank">seven</option> 
</select> 

utilizzando jQuery?

Modifica: Quando si seleziona una voce dalla selezione/menu a discesa, il collegamento dovrebbe aprirsi automaticamente in una nuova finestra o scheda. Voglio anche in grado di stile piace: http://www.dfc-e.com/metiers/multimedia/opensource/jqtransform/

+0

@Dominic Rodger - Il codice che ho dato è solo per esempio –

risposta

12
$('ul.selectdropdown').each(function() { 
    var select = $(document.createElement('select')).insertBefore($(this).hide()); 
    $('>li a', this).each(function() { 
     var a = $(this).click(function() { 
      if ($(this).attr('target')==='_blank') { 
       window.open(this.href); 
      } 
      else { 
       window.location.href = this.href; 
      } 
     }), 
     option = $(document.createElement('option')).appendTo(select).val(this.href).html($(this).html()).click(function() { 
      a.click(); 
     }); 
    }); 
}); 

In risposta al tuo ultimo commento, ho modificato un po ', ma non hanno provato. Fammi sapere.

$('ul.selectdropdown').each(function() { 
    var list = $(this), select = $(document.createElement('select')).insertBefore($(this).hide()); 

    $('>li a', this).each(function() { 
     var target = $(this).attr('target'), 
     option = $(document.createElement('option')) 
      .appendTo(select) 
      .val(this.href) 
      .html($(this).html()) 
      .click(function(){ 
       if(target==='_blank') { 
        window.open($(this).val()); 
       } 
       else { 
        window.location.href = $(this).val(); 
       } 
      }); 
    }); 
    list.remove(); 
}); 
+0

thx sto provando la soluzione –

+0

nessun collegamento non si apre in una nuova finestra http://jsbin.com/etoyu –

+0

Non funziona o non è quello che vuoi? Codice – czarchaic

19
$(function() { 
    $('ul.selectdropdown').each(function() { 
     var $select = $('<select />'); 

     $(this).find('a').each(function() { 
      var $option = $('<option />'); 
      $option.attr('value', $(this).attr('href')).html($(this).html()); 
      $select.append($option); 
     }); 

     $(this).replaceWith($select); 
    }); 
}); 

EDIT

Come con qualsiasi codice jQuery che si desidera eseguire il caricamento della pagina, bisogna avvolgere dentro $(document).ready(function() { ... }); blocco, o all'interno dello stesso di versione più corta $(function() { ... });. Ho aggiornato la funzione per mostrarlo.

EDIT

Ci era un bug nel mio codice anche, ha cercato di prendere href dall'elemento li.

+0

ma non funziona http://jsbin.com/omulu –

+0

ancora non funziona http://jsbin.com/uvabi –

+0

Stai provando ad eseguire lo script all'interno dei tag