09 May
Filter a multilevel menu with a search input
Mostly you can use select2 js for drop down which are basically use html select  tag, but sometime we need same functionality on ul -li based menu. Here i am explaining with code part to implement search input on ul-li based menu item. I am going to do basic for more you can modify and use ajax for proper output.
I a using below js and css files
1. jquery min js
2. jquery ui min js
3. fon awesome css
4. custom css for drop down
Link are
google library
Font-awesome css
Custom Css
<style>
.div_search_wrap{
width:50%;
}
.select_drop{
width:94%; border:solid 1px #e2e2e2; padding:4px 15px; line-height:30px; -webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; float:left; position:relative; font-size:14px;
}
.select_drop i{float:right; font-size:23px; margin-top:5px; color:#888}
.select_drop.open i.fa-caret-down:before{content: "\f0d8" !important;}
.select_drop .bottom-opendiv ul li i{line-height:35px;}
.select_drop .bottom-opendiv{width:100%; display:none; -webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-moz-border-radius-bottomleft: 5px;
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px; float:left; position:absolute; left:-1px; top:-1px; border:solid 1px #e2e2e2;background:#fff; -webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
z-index: 9999;}
.bottom-opendiv h2{padding-bottom:10px;}
.select_drop .bottom-opendiv ul{max-height:200px; width:100%; overflow:auto; float:left; padding:0px;}
.select_drop .bottom-opendiv h2 i{float:left; margin-right:10px; line-height:30px;}
.select_drop .bottom-opendiv h2{font-size:14px; padding-left:15px;}
.select_drop .bottom-opendiv ul li{padding:0 3%; line-height:35px; border-bottom:solid 1px #e2e2e2; font-size:14px; float:left; width:94%;}
.select_drop .bottom-opendiv ul li:hover, .select_drop .bottom-opendiv ul li.active{background:#81b745; color:#fff; cursor:pointer;}
.select_drop .bottom-opendiv ul li i.fa-caret-down{margin-top:10px; z-index:1000; float:right;}
.select_drop .bottom-opendiv h2 i.fa-caret-down{margin-right:15px; float:right;}
.select_drop.open .bottom-opendiv{display:block;}
#menu_wrapper, #sub_menu_wrapper{border-bottom:1px solid #e2e2e2;}
.select_first i{line-height:30px;}
.search_sub_specialty{text-align:center; padding-top:10px!important; list-style:none;}
.search_sub_specialty:hover{background:none!important;}
.select_first span, .bottom-opendiv h2 span{white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width:90%; display:inline-block}
.form-group-in{width:33%; float:left;}
.form-group-in > .form-group > input[type="text"]{width:70%}
#specialty_head_wrapper h2 i, #specialty_head_wrapper li i{font-size:12px !important; line-height:19px;}
.select_first i, h2.select-first i, #specialty_head_wrapper h2 i.fa-caret-down{font-size:23px !important}
.ui-menu .ui-menu-item{font-size:14px; font-family:"Open Sans"; color:#595959; border:solid 1px #fff; padding:7px 10px; cursor:pointer}
.ui-menu .ui-menu-item:hover{background:#81b745; color:#fff;}
.ui-menu.ui-autocomplete{padding:0px;}
.sp-search-first input[type="search"] {
border: 1px solid #e2e2e2;
border-radius: 5px;
color: #595959;
float: left;
font-family: "open_sansregular";
font-size: 14px;
margin: 0;
padding: 5px 5px;
width: 80%;
}
.sp-search-first{
padding: 10px;
position: absolute;
top: 30px;
width: 80%;
}
</style>
 Html Part of Drop Down
<div class="div_search_wrap">
<label>Find me a from multilevel list</label>
<div class="select_drop">
<div class="select_first"><span id="span_heading">Choose Menu item</span><i id="arrow_down_heading" class="fa fa-caret-down"></i></div>
<div class="bottom-opendiv">
<div id="menu_wrapper">
<h2 class="select_first"><span id="span_item_name">Choose Sub item</span><i class="fa fa-caret-down"></i></h2>
<div class="sp-search-first"><input type="search" role="textbox" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" tabindex="0" class="select2-search_field" id="filter"></div>
<ul id="menu_list_wrapper">
<li class="choose_item" id="1">India<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="2">Iceland<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="3">Indonesia<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="4">Iran<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="5">Iraq<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="6">Ireland<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="7">Israel<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="8">Italy<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="9">Jamaica<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="10">Japan<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="11">Jordan<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="12">Kazakhstan<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="13">Kenya<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="14">Kiribati<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="15">Kosovo<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="16">Kuwait<i class="fa fa-chevron-right"></i></li>
<li class="choose_item" id="17">Kyrgyzstan<i class="fa fa-chevron-right"></i></li>
</ul>
</div>
<div id="sub_menu_wrapper" style="display:none;">
<h2><i id="back_to_menu" class="fa fa-chevron-left"></i><span id="span_sub_menu_name"></span><i class="fa fa-caret-down select_first"></i></h2>
<ul id="sub_menu_list_wrapper">
<li class="choose_sub_menu" id="8">Rajasthan</li>
<li class="choose_sub_menu" id="10">Haryana</li>
<li class="choose_sub_menu" id="11">Punjab</li>
</ul>
</div>
</div>
</div>
</div>
 Script or js Required
<script>
// when clcik on dropdown
$(document).on('click', '.select_first', function(e){
$( '.select_drop' ).toggleClass("open");
});
//when choose an item from main menu
$(document).on('click', '.choose_item', function(e){
$('#span_sub_menu_name').text($(this).text());
$('#sub_menu_list_wrapper .choose_sub_menu').css("visibility", "visible");
$('#sub_menu_list_wrapper .choose_sub_menu').css('display','block');
$('#sub_menu_wrapper').show("slide", { direction: "right" }, 400);
$('#menu_wrapper').css('display','none')
$('#menu_wrapper').hide("slide", { direction: "left" }, 400);
});
// when choose a sub item from sub menu
$(document).on('click', '.choose_sub_menu', function(e){
sub_menu_name = $(this).text();
sub_menu_data = $('#span_sub_menu_name').text().split('--');
sub_menu_f_name = sub_menu_data[0]+' -- '+sub_menu_name;
$('#span_sub_menu_name').text(sub_menu_f_name);
$('#span_heading').text(sub_menu_f_name);
$('.select_first').click();
});
// when clcik on back arrow from sub menu
$(document).on('click', '#back_to_menu', function(e){
ins_data = $('#span_sub_menu_name').text().split('--');
$('#span_item_name').text("Choose Menu item");
$('#span_heading').text("Choose Menu item");
$('#menu_wrapper').show("slide", { direction: "left" }, 400);
$('#sub_menu_wrapper').css('display','none')
$('#sub_menu_wrapper').hide("slide", { direction: "right" }, 400);
$('.choose_item').removeClass('active');
});
// when type in search box
$(document).ready(function () {
$("#filter").keyup(function () {
var filter = $(this).val(),
count = 0;
$("li").each(function () {
if (filter == "") {
$(this).css("visibility", "visible");
$(this).fadeIn();
} else if ($(this).text().search(new RegExp(filter, "i")) < 0) {
$(this).css("visibility", "hidden");
$(this).fadeOut();
} else {
$(this).css("visibility", "visible");
$(this).fadeIn();
}
});
});
});
</script>
Now you can combine all code in to a single html file to see result.
I am a software engineer who specializes in Internet applications. I have worked with a wide variety of technologies and programming languages to open source LAMP environments. I have more than 6 years of object-oriented programming experience and am highly proficient in ActionScript, PHP, MYSQL, JavaScript, Jquery and a multitude of other technologies used in modern web applications.
Follow me
Latest posts by Rajeev Achra (see all)
- Jquery webcam plugin - June 19, 2016
- How To Add and Delete Users on a CentOSServer - June 5, 2016
- How To Set Up vsftpd on CentOS 6 - June 5, 2016