AngularJS Example:

HTML

<div ng-app="app" ng-controller="Ctrl">
   <div>
    <label>Filter:</label>
    <input type="text" ng-model="filter">
    <hr>
    <select size="20" ng-model="selected" ng-options="i as i.name group by i.cls for i in list | filter:filter"></select>
  </div>
</div>

CSS

</style> <!-- Ugly Hack due to jsFiddle issue: http://goo.gl/BUfGZ --> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<style>

JavaScript

angular.module('app', [])

.controller('Ctrl', function($scope) {
  $scope.list = [
  	{cls: 'Foo', name: 'Alpha'},
    {cls: 'Foo', name: 'Beta'},
    {cls: 'Foo', name: 'Gamma'},
    {cls: 'Bar', name: 'Delta'},
    {cls: 'Bar', name: 'Epsilon'},
    {cls: 'Baz', name: 'Omega'}
  ];
});