$(function() { $.widget("custom.catcomplete", $.ui.autocomplete, { _create: function() { this._super(); this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); }, _renderMenu: function(ul, items) { var that = this, currentCategory = ""; $.each(items, function(index, item) { var li; if (item.category != currentCategory) { ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); currentCategory = item.category; } li = that._renderItemData(ul, item); if (item.category) { li.attr("aria-label", item.category + " : " + item.label); } }); } }); var data = [{ label: "Groovy", category: "C-like" }, { label: "Java", category: "C-like" }, { label: "Perl", category: "C-like" }, { label: "Clojure", category: "Lisp" }, { label: "Scheme", category: "Lisp" }, { label: "Lisp", category: "Lisp" }, { label: "ActionScript", category: "Scripting" }, { label: "AppleScript", category: "Scripting" }, { label: "JavaScript", category: "Scripting" }, ]; $("#search").catcomplete({ delay: 0, source: data }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> <link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"></link> <label for="search">Search:</label> <input id="search">