jQuery實(shí)現(xiàn)select模糊查詢(反射機(jī)制)
通過(guò)如下代碼就可以簡(jiǎn)單實(shí)現(xiàn)select帶模糊查詢的條件查詢,具體如下jquery.select.js如下:
(function($) {
$.selectSuggest = function(target, data, itemSelectFunction) {
var defaulOption = {
suggestMaxHeight: '200px',//彈出框最大高度
itemColor : '#000000',//默認(rèn)字體顏色
itemBackgroundColor:'RGB(199,237,204)',//默認(rèn)背景顏色
itemOverColor : '#ffffff',//選中字體顏色
itemOverBackgroundColor : '#C9302C',//選中背景顏色
itemPadding : 3 ,//item間距
fontSize : 12 ,//默認(rèn)字體大小
alwaysShowALL : true //點(diǎn)擊input是否展示所有可選項(xiàng)
};
var maxFontNumber = 0;//最大字?jǐn)?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)建一個(gè)子<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)建一個(gè)子<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":"中國(guó)石油"},
{"id":"4","text":"中國(guó)建筑"},
{"id":"3","text":"中國(guó)移動(dòng)"},
{"id":"5","text":"中國(guó)工商銀行"},
{"id":"7","text":"中國(guó)鐵建"},
{"id":"8","text":"上海汽車(chē)集團(tuán)"},
{"id":"9","text":"中國(guó)建設(shè)銀行"},
{"id":"10","text":"聯(lián)想集團(tuán)"}];
var itemSelectFuntion = function(){
alert(this.id + "," + this.innerHTML);
};
$.selectSuggest('testInput',datas,itemSelectFuntion);
</script>
</html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery遍歷之next()、nextAll()方法使用實(shí)例
這篇文章主要介紹了jQuery遍歷之next()、nextAll()方法使用實(shí)例,本文先是給出了實(shí)例代碼,然后對(duì)代碼的作用分析和說(shuō)明,需要的朋友可以參考下2014-11-11
jQuery實(shí)現(xiàn)數(shù)字加減效果匯總
本文將介紹常見(jiàn)的幾種使用spinner數(shù)字微調(diào)器來(lái)實(shí)現(xiàn)數(shù)字加減的功能的方法。非常的簡(jiǎn)單實(shí)用,這里推薦給大家2014-12-12
jQuery下的幾個(gè)你可能沒(méi)用過(guò)的功能
用jQuery好久了,都做了兩個(gè)項(xiàng)目了。今兒晚上喝咖啡喝多了,這都兩點(diǎn)多了睡不著,給大家分享下我在項(xiàng)目中用到的一些用jQuery實(shí)現(xiàn)的一些比較好的功能。希望對(duì)一些新手有點(diǎn)用。。。高手們可以拍磚哈。。。。我頭很硬不怕疼。。。呵呵。2010-08-08
jQuery實(shí)現(xiàn)動(dòng)態(tài)顯示select下拉列表數(shù)據(jù)的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)動(dòng)態(tài)顯示select下拉列表數(shù)據(jù)的方法,涉及jQuery針對(duì)json數(shù)據(jù)的讀取、遍歷及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-02-02
javascript權(quán)威指南 學(xué)習(xí)筆記之null和undefined
JavaScript中的關(guān)鍵字null是一個(gè)特殊的值,它表示“無(wú)值”。null常常被看作對(duì)象類(lèi)型的一個(gè)特殊值,即代表“無(wú)對(duì)象”的值。2011-09-09
jquery實(shí)現(xiàn)TAB選項(xiàng)卡鼠標(biāo)經(jīng)過(guò)帶延遲效果的方法
這篇文章主要介紹了jquery實(shí)現(xiàn)TAB選項(xiàng)卡鼠標(biāo)經(jīng)過(guò)帶延遲效果的方法,可實(shí)現(xiàn)tab選項(xiàng)卡的延遲加載效果,涉及jquery鼠標(biāo)事件及延遲函數(shù)的相關(guān)使用技巧,需要的朋友可以參考下2015-07-07
jquery實(shí)現(xiàn)的樹(shù)形目錄實(shí)例
這篇文章主要介紹了jquery實(shí)現(xiàn)的樹(shù)形目錄,涉及jquery針對(duì)頁(yè)面元素及鼠標(biāo)事件的相關(guān)操作技巧,需要的朋友可以參考下2015-06-06
jQuery 無(wú)限級(jí)菜單的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)jQuery 無(wú)限級(jí)菜單的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02

