jQuery實現(xiàn)select模糊查詢(反射機制)
更新時間:2017年01月14日 10:47:19 作者:ole_triangle_java
這篇文章主要為大家詳細介紹了jQuery實現(xiàn)select帶模糊查詢的條件查詢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
通過如下代碼就可以簡單實現(xiàn)select帶模糊查詢的條件查詢,具體如下jquery.select.js如下:
(function($) {
$.selectSuggest = function(target, data, itemSelectFunction) {
var defaulOption = {
suggestMaxHeight: '200px',//彈出框最大高度
itemColor : '#000000',//默認字體顏色
itemBackgroundColor:'RGB(199,237,204)',//默認背景顏色
itemOverColor : '#ffffff',//選中字體顏色
itemOverBackgroundColor : '#C9302C',//選中背景顏色
itemPadding : 3 ,//item間距
fontSize : 12 ,//默認字體大小
alwaysShowALL : true //點擊input是否展示所有可選項
};
var maxFontNumber = 0;//最大字數(shù)
var currentItem;
var suggestContainerId = target + "-suggest";
var suggestContainerWidth = $('#' + target).innerWidth();
var suggestContainerLeft = $('#' + target).offset().left;
var suggestContainerTop = $('#' + target).offset().top + $('#' + target).outerHeight();
var showClickTextFunction = function() {
$('#' + target).val(this.innerText);
currentItem = null;
$('#' + suggestContainerId).hide();
}
var suggestContainer;
if ($('#' + suggestContainerId)[0]) {
suggestContainer = $('#' + suggestContainerId);
suggestContainer.empty();
} else {
suggestContainer = $('<div></div>'); //創(chuàng)建一個子<div>
}
suggestContainer.attr('id', suggestContainerId);
suggestContainer.attr('tabindex', '0');
suggestContainer.hide();
var _initItems = function(items) {
suggestContainer.empty();
var itemHight=0;
for (var i = 0; i < items.length; i++) {
if(items[i].text.length > maxFontNumber){
maxFontNumber = items[i].text.length;
}
var suggestItem = $('<div></div>'); //創(chuàng)建一個子<div>
suggestItem.attr('id', items[i].id);
suggestItem.append(items[i].text);
suggestItem.css({
'padding':defaulOption.itemPadding + 'px',
'white-space':'nowrap',
'cursor': 'pointer',
'background-color': defaulOption.itemBackgroundColor,
'color': defaulOption.itemColor
});
suggestItem.bind("mouseover",
function() {
$(this).css({
'background-color': defaulOption.itemOverBackgroundColor,
'color': defaulOption.itemOverColor
});
currentItem = $(this);
});
suggestItem.bind("mouseout",
function() {
$(this).css({
'background-color': defaulOption.itemBackgroundColor,
'color': defaulOption.itemColor
});
currentItem = null;
});
suggestItem.bind("click", showClickTextFunction);
suggestItem.bind("click", itemSelectFunction);
suggestItem.appendTo(suggestContainer);
suggestContainer.appendTo(document.body);
}
}
var inputChange = function() {
var inputValue = $('#' + target).val();
inputValue = inputValue.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
var matcher = new RegExp(inputValue, "i");
return $.grep(data,
function(value) {
return matcher.test(value.text);
});
}
$('#' + target).bind("keyup",
function() {
_initItems(inputChange());
});
$('#' + target).bind("blur",
function() {
if(!$('#' + suggestContainerId).is(":focus")){
$('#' + suggestContainerId).hide();
if (currentItem) {
currentItem.trigger("click");
}
currentItem = null;
return;
}
});
$('#' + target).bind("click",
function() {
if (defaulOption.alwaysShowALL) {
_initItems(data);
} else {
_initItems(inputChange());
}
$('#' + suggestContainerId).removeAttr("style");
var tempWidth = defaulOption.fontSize*maxFontNumber + 2 * defaulOption.itemPadding + 30;
var containerWidth = Math.max(tempWidth, suggestContainerWidth);
var h = this.scrollHeight;
$('#' + suggestContainerId).css({
'border': '1px solid #ccc',
'max-height': '100px',
'top': suggestContainerTop,
'left': suggestContainerLeft,
'width': containerWidth,
'position': 'absolute',
'font-size': defaulOption.fontSize+'px',
'font-family':'Arial',
'z-index': 99999,
'background-color': '#FFFFFF',
'overflow-y': 'auto',
'overflow-x': 'hidden',
'white-space':'nowrap'
});
$('#' + suggestContainerId).show();
});
_initItems(data);
$('#' + suggestContainerId).bind("blur",
function() {
$('#' + suggestContainerId).hide();
});
}
})(jQuery);
html如下:
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<title>select.suggest</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap -->
<script src="js/jquery-1.10.2.js"></script>
<script src="js/jquery.select.js"></script>
</head>
<body>
<h1>Hello, world!</h1>
<div>
<div>
<div>.col-md-1
</div>
<div style="">
<input id="testInput" type="text" />
</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<!-- Include all compiled plugins (below), or include individual files as needed -->
</body>
<script type="text/javascript">
var datas =[{"id":"2","text":"中國石油"},
{"id":"4","text":"中國建筑"},
{"id":"3","text":"中國移動"},
{"id":"5","text":"中國工商銀行"},
{"id":"7","text":"中國鐵建"},
{"id":"8","text":"上海汽車集團"},
{"id":"9","text":"中國建設(shè)銀行"},
{"id":"10","text":"聯(lián)想集團"}];
var itemSelectFuntion = function(){
alert(this.id + "," + this.innerHTML);
};
$.selectSuggest('testInput',datas,itemSelectFuntion);
</script>
</html>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何用jQuery實現(xiàn)ASP.NET GridView折疊伸展效果
我們今天就一個具體的需求進行分析,引出如何用jQuery實現(xiàn)ASP.NET GridView折疊伸展效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-09-09
jquery監(jiān)控數(shù)據(jù)是否變化(修正版)
jquery監(jiān)控數(shù)據(jù)是否變化(修正版) 之前寫的那篇中存在許多bug,今天重新整理了一下。還請各位指教2011-04-04
JQuery獲取元素文檔大小、偏移和位置和滾動條位置的方法集合
在ajax中經(jīng)常需要對元素的位置進行精確的定位,此時不僅需要獲取元素自身的大小位置等屬性。還需要知道頁面、瀏覽器、滾動條等的長度和寬度。2010-01-01

