關(guān)于“搜索”方法

模糊查詢

輸入關(guān)鍵字或者相關(guān)大小寫字母實現(xiàn)搜索功能

/****模糊查詢****/
$("selector").on("focus", function() {
    var that = $(this);
    //顯示列表
    $("selector").show();
    //輸入實時查詢事件,propertychange是IE的輸入監(jiān)聽事件耘戚,input是其它瀏覽器
    $("selector").on("input propertychange", function() {
        $("selector")
            .hide() // 隱藏所有
            .filter(":contains('" + that.val().toLocaleLowerCase() + "')") //小寫
            .show(); // 顯示已過濾條目
    });
});
/****模糊查詢  END****/

實時篩選

通過定時器進行實施篩選功能

var text = "";  
setInterval(function(){  
  text = $('selector').val();//獲取文本框輸入  
  if($.trim(text) != ""){  
    $("#table tr:not(:first-child)").hide().filter(":contains('"+text+"')").show();  
  }else{  
    $('selector').show();//當刪除文本框的內(nèi)容時嗡髓,又重新顯示表格所有內(nèi)容  
  }  
},100);

拼音/名字搜索

該方法通過設(shè)置搜索項的屬性實現(xiàn)
html:

<li pinyin="ly" cityname="臨沂">
    <a href="#">臨沂 </a>
</li>

js:

function searchCity() {
  var searchCityName = $("selector").val();
  if(searchCityName == "") {
    $("selector").show();
  } else {
    $("selector").each(function() {
      var pinyin = $(this).attr("pinyin"); // 通過設(shè)置搜索項屬性確定
      var cityName = $(this).attr("cityName");
      if(pinyin.indexOf(searchCityName) != -1 ||
         cityName.indexOf(searchCityName) != -1) {
        $(this).show();
      } else {
        $(this).hide();
      }
    });
  }
}
$('selector').bind('input propertychange', function() {
  searchCity();
});

以上都是簡單的頁面內(nèi)搜索,如果涉及到服務(wù)器端搜索毕莱,可以使用 ajax 實現(xiàn)服務(wù)器端搜索功能器贩。


下邊是一個相對復(fù)雜的搜索框的制作。(針對信息量不大的模糊查詢)
html部分:

<div class="wyInput" id="myInput">
    <!-- 搜索框部分 -->
    <div class="wyinput-group">
        <input type="text" placeholder="請輸入關(guān)鍵字">
        <a href="#" class="wyinput-btn">搜 索</a>
    </div>
    <!-- 搜索結(jié)果下拉框部分 -->
    <div class="wyinput-drop">

    </div>
</div>

js部分:

$(function () {
    //許傳入類似案例的json對象朋截,實際中可以使后臺獲取的數(shù)據(jù)的填充蛹稍,類似于顯示數(shù)據(jù)庫中有無該數(shù)據(jù)一樣
    $("#myInput").wy_inselect([{name:'紫色'},{name:'yellow'},{name:'pink'},{name:'whrite'}]); 
});

封裝的函數(shù):

(function($){
    $.fn.extend({ // 為jQuery擴展一個或多個實例屬性和方法(主要用于擴展方法)。
        "wy_inselect":function(options){
            if(!isValid(options)) return this; // 判斷當前搜索數(shù)組是否合規(guī)
            var $Id = $(this); // 代理當前 this 部服,當前 this 指的是 id 為 myInput 的dom節(jié)點
          console.log($Id) //n.fn.init [div#myInput.wyInput, selector: "#myInput", context: document]
            var last;
            // 重置當前下拉框并隱藏
            $Id.find(".wyinput-drop").css("width",$(".wyinput-group input").outerWidth()+"px").hide();
            // 監(jiān)聽當前 input 的鍵盤松開事件
            $Id.find(".wyinput-group input").keyup(function(event){
                last = event.timeStamp; // timeStamp 事件屬性可返回一個時間戳唆姐。如:9298.01999987103
                setTimeout(function(){    //設(shè)時延遲0.5s執(zhí)行
                    if(last-event.timeStamp==0)
                    //如果時間差為0(也就是你停止輸入0.5s之內(nèi)都沒有其它的keyup事件發(fā)生)
                    {
                        var arr= searchIndex($Id,options); // 搜索當前數(shù)組
                        loadDrop($Id,arr); // 設(shè)置當前下拉框
                    }
                },500);

            })
            // 類似事件委托
            $Id.find(".wyinput-drop").delegate(".drop-line a","click",function(){
                // 當點擊搜索結(jié)果項時,將當前的點擊項填入到搜索框中
                var html=$(this).html(); // 當前的 this 指的是被點擊項
                console.log(html)
                console.log($(this)) // n.fn.init [a, context: a]
                // 重置結(jié)果下拉框廓八,結(jié)果填入輸入框奉芦,并隱藏下拉框
                $(this).parents(".wyinput-drop").siblings(".wyinput-group").find("input").val(html);
                $Id.find(".wyinput-drop").hide()
            })

        }
    })

    //監(jiān)測參數(shù)是否合法
    function isValid(options){
        return !options || (options && typeof options === "object")?true:false;
    }

    //模糊查詢
    function searchIndex($Id,options){ // $Id 為當前的整個搜索框
        var $input = $Id.find(".wyinput-group input");
        var keywords = $input.val();
        var arr=[];
        if(keywords==""||keywords==" "){
            return arr;
        }
        $.each(options,function(idx,obj){ // 數(shù)組的每一項都是對象
            if(obj.name.indexOf(keywords)>=0){
                arr.push({name:obj.name});
            }
        })
        console.log(arr);
        return arr;
    }

    //加載下拉框
    function loadDrop($Id,arr){
        var html = "";
        if(arr.length == 0){
            $Id.find(".wyinput-drop").html("").hide();
            return;
        }
        $.each(arr,function(idx,obj){
            html+='<p class="drop-line">' + '<a href="#">'+obj.name+'</a></p>';
        })
        $Id.find(".wyinput-drop").html(html).show();
    }
})(window.jQuery)

涉及到的方法:

  • timeStamp 事件屬性可返回一個時間戳。指示發(fā)生事件的日期和時間(從 epoch 開始的毫秒數(shù))剧蹂。
  • $.fn.extend() 函數(shù)為 jQuery 擴展一個或多個實例屬性和方法(主要用于擴展方法)声功。參考
  • $.each() 是對數(shù)組,json 和 dom 結(jié)構(gòu)等的遍歷宠叼。$.each(arr1,function(i,val){ }) 兩個參數(shù)先巴,第一個參數(shù)表示遍歷的數(shù)組的下標,第二個參數(shù)表示下標對應(yīng)的值冒冬。
  • find() 方法獲得當前元素集合中每個元素的后代伸蚯,通過選擇器、jQuery 對象或元素來篩選简烤。
  • delegate() 方法為指定的元素(屬于被選元素的子元素)添加一個或多個事件處理程序剂邮,并規(guī)定當這些事件發(fā)生時運行的函數(shù)。使用 delegate() 方法的事件處理程序適用于當前或未來的元素(比如由腳本創(chuàng)建的新元素)横侦。類似于事件委托
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挥萌,一起剝皮案震驚了整個濱河市绰姻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瑞眼,老刑警劉巖龙宏,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棵逊,死亡現(xiàn)場離奇詭異伤疙,居然都是意外死亡,警方通過查閱死者的電腦和手機辆影,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門徒像,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛙讥,你說我怎么就攤上這事锯蛀。” “怎么了次慢?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵旁涤,是天一觀的道長。 經(jīng)常有香客問我迫像,道長劈愚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任闻妓,我火速辦了婚禮菌羽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘由缆。我一直安慰自己注祖,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布均唉。 她就那樣靜靜地躺著是晨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舔箭。 梳的紋絲不亂的頭發(fā)上罩缴,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音限嫌,去河邊找鬼靴庆。 笑死,一個胖子當著我的面吹牛怒医,可吹牛的內(nèi)容都是我干的炉抒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼稚叹,長吁一口氣:“原來是場噩夢啊……” “哼焰薄!你這毒婦竟也來了拿诸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤塞茅,失蹤者是張志新(化名)和其女友劉穎亩码,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體野瘦,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡描沟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鞭光。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吏廉。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惰许,靈堂內(nèi)的尸體忽然破棺而出席覆,到底是詐尸還是另有隱情,我是刑警寧澤汹买,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布佩伤,位于F島的核電站,受9級特大地震影響晦毙,放射性物質(zhì)發(fā)生泄漏生巡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一结序、第九天 我趴在偏房一處隱蔽的房頂上張望障斋。 院中可真熱鬧,春花似錦徐鹤、人聲如沸垃环。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遂庄。三九已至,卻和暖如春劲赠,著一層夾襖步出監(jiān)牢的瞬間涛目,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工凛澎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霹肝,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓塑煎,卻偏偏與公主長得像沫换,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子最铁,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點是DOM的常...
    凜0_0閱讀 1,318評論 0 8
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式讯赏。設(shè)計者無需花費時間糾纏JS復(fù)雜的高級特性垮兑。 1....
    LaBaby_閱讀 1,162評論 0 1
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計者無需花費時間糾纏JS復(fù)雜的高級特性漱挎。 1....
    LaBaby_閱讀 1,325評論 0 2
  • 一系枪、樣式篇 第1章 初識jQuery (1)環(huán)境搭建 進入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,354評論 0 44
  • 通過jQuery,您可以選瓤牧隆(查詢私爷,query)HTML元素,并對它們執(zhí)行“操作”(actions)怜庸。 jQuer...
    枇杷樹8824閱讀 651評論 0 3