Jquery UI SelectMenu icon-based menu rendering
HTML
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<div class="demo">
<form action="#">
<fieldset>
<select name="filesA" id="filesA">
<option value="jquery" data-class="ui-icon-script"></option>
<option value="jquerylogo" data-class="ui-icon-image"></option>
<option value="jqueryui" data-class="ui-icon-script"></option>
<option value="jqueryuilogo" data-class="ui-icon-image"></option>
<option value="somefile" selected="selected" data-class="ui-icon-help"></option>
</select>
</fieldset>
</form>
</div>
CSS
h2 {
margin: 30px 0 0 0;
}
fieldset {
border: 0;
}
label {
display: block;
}
/* select with custom icons */
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item-wrapper {
padding: 0.5em 0 0.5em 3em;
}
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon {
height: 24px;
width: 24px;
top: 0.1em;
}
.ui-icon.video {
background: url("images/24-video-square.png") 0 0 no-repeat;
}
.ui-icon.podcast {
background: url("images/24-podcast-square.png") 0 0 no-repeat;
}
.ui-icon.rss {
background: url("images/24-rss-square.png") 0 0 no-repeat;
}
.ui-icon.source-type-blog {
background: url("images/24-rss-square.png") 0 0 no-repeat;
}
/* select with CSS avatar icons */
option.avatar {
background-repeat: no-repeat !important;
padding-left: 20px;
}
.avatar .ui-icon {
background-position: left top;
}
body {
font-family: Arial, Helvetica, sans-serif;
}
table {
font-size: 1em;
}
.ui-draggable, .ui-droppable {
background-position: top;
}
.ui-selectmenu-button.ui-button {
width: 50px;
padding: 0px;
}
JavaScript
$( function() {
$.widget( "custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function( ul, item ) {
var li = $( "<li>" ),
wrapper = $( "<div>", { text: item.label } );
if ( item.disabled ) {
li.addClass( "ui-state-disabled" );
}
$( "<span>", {
style: item.element.attr( "data-style" ),
"class": "ui-icon " + item.element.attr( "data-class" )
})
.appendTo( wrapper );
return li.append( wrapper ).appendTo( ul );
},
_renderButtonItem: function( item ) {
var buttonItem = $( "<span>", {
"class": "ui-selectmenu-text"
})
//this._setText( buttonItem, item.label);
buttonItem.css( "background-color", item.value );
var wrapper = $( "<div>", { text: item.label } );
if ( item.disabled ) {
buttonItem.addClass( "ui-state-disabled" );
}
$( "<span>", {
style: item.element.attr( "data-style" ),
"class": "ui-icon " + item.element.attr( "data-class" )
})
.appendTo( wrapper );
buttonItem.append(wrapper);
return buttonItem;
}
});
$( "#filesA" )
.iconselectmenu()
.iconselectmenu( "menuWidget" )
.addClass( "ui-menu-icons" );
} );