jQuery: trasformare un elemento select in una lista

jQuery: trasformare un elemento select in una lista

jQuery ci permette di domare graficamente anche le select box, notoriamente ostiche da formattare con i CSS.

Dato un elemento select così strutturato:


<select name="choice" id="choice" data-title="Scegli">
	<option value="A">A</option>
	<option value="B">B</option>
	<option value="C">C</option>
</select>

la soluzione è la seguente:


(function( $ ) {
	$.fn.select = function() {
		return this.each(function() {
			var $element = $( this ),
				html = "<ul class='select-list'>";
			
			    html += "<li><span>" + $element.data( "title" ) + "</span></li>";
			    
			    $element.find( "option" ).each(function() {
				   html += "<li data-value='" + $( this ).val() + "'>" + $( this ).text() + "</li>"; 
				    
			    });
			    
			    html += "</ul>";
			    
			    $element.hide().before( html );
			    
			    $element.prev().
			    find( "> li" ).not( "li:first" ).each(function() {
				   var $item = $( this );
				   var value = $item.data( "value" );
				   $item.click(function() {
					  $element.val( value );
					  $element.prev().toggleClass( "open" );
					  $element.prev().find( "span" ).addClass( "item-selected" ).text( $item.text() ); 
				   });
				 
			    });
		});
	};

	
})( jQuery );

Il plugin crea la lista nascondendo al contempo la select box. Ad ogni click su una voce della lista verrà impostato il corrispondente valore per la select box.

Torna su