前端实现搜索功能和模糊查询

前端实现搜索功能和模糊查询

功能介绍:

在前端实现搜索,获取数据部分可以用ajax来实现,动态生成li标签,正则表达式实现的模糊查询

js实现代码:

    //  $("#BA_230759697085187").remove()
    $("#BA_230759697085187").empty()
   $("#BA_230759697085187").append("<input type='text' id='searchinput' class='searchinput'  placeholder='请输入搜索的内容' ><ul id='list'></ul>");

   window.BApartCustom = window.BApartCustom || [];
   window.BApartCustom.push(BApartExtend);
      function BApartExtend() {
       //数据集取数方法,从产品中抽出	
       // 成功的回调函数		
       var successCall = function (json) {
           //取数成功后,根据数据实现自己的逻辑功能
           try {
                   var reval = JSON.parse(json);
                //    console.log(reval.data);
                   if (typeof reval == 'object' && reval) {
                       //页面中的菜单
                       var dataList = reval.data;//有权限的button按钮
                       // console.log(textdom.length)
                       console.log(dataList)
                       var oTxt = document.getElementById('searchinput');
                       var oBtn = document.getElementById('BA_180507071762619');
                       var oList = document.getElementById('list');
                    //    console.log(dataList.NAME)
                        //点击事件
                        var  dataNameList=[]
                         var  dataLineList=[]
                        for(var i=0;i<dataList.length;i++){
                            dataNameList[i]=dataList[i].NAME;
                            dataLineList[i]=dataList[i].DZ;
                        }
                        console.log("dataNameList:"+dataNameList.length)
                        // console.log("dataLineList"+datalineList)
                        // 回车查询
                        oTxt.addEventListener('keydown', function(e){
                                 var keyWord = oTxt.value;  
                                 var searchList = searchByRegExp(keyWord, dataNameList);
                                 renderFruits(searchList,dataList);
                        }, false);
                        // 点击搜索按钮查询
                        oBtn.addEventListener('click', function(){
                            var keyWord = oTxt.value;  //输入的文本值
                            var searchList = searchByRegExp(keyWord, dataNameList);
                            renderFruits(searchList,dataList);
                        })
                        var cpLock = false;
                        $('#txt').on('compositionstart', function () {
                            cpLock = true;
                            console.log("不搜索")
                        });
                        $('#txt').on('compositionend', function () {
                            cpLock = false;
                            console.log("汉字搜索");
                            var keyWord = oTxt.value;
                            // var fruitList = searchByIndexOf(keyWord,fruits);
                            var searchList = searchByRegExp(keyWord, dataNameList);
                            // console.log(searchList);
                            renderFruits(searchList,dataList);
                        });
                        $('#txt').on('input', function () {
                            if (!cpLock) {
                                console.log("字母搜索")
                                var keyWord = oTxt.value;
                                // var fruitList = searchByIndexOf(keyWord,fruits);
                                var searchList = searchByRegExp(keyWord, dataNameList);
                                // console.log(searchList);
                                renderFruits(searchList,dataList);
                                }
                        });
                        // 渲染列表
                        function renderFruits(list,dataList){
                            if(!(list instanceof Array)){
                                return ;
                            }
                            oList.innerHTML = '';
                            var len = list.length;
                            var item = null;
                            for(var i=0;i<len;i++){
                                item = document.createElement('li');
                             //为了实现跳转,加上<a>标签
                                item.innerHTML = "<a style='color:#fff' href='javascript:; target='_top'' οnclick='func()'>"+list[i]+"</a>";
                                // item.setsetAttribute("link","")
                                oList.appendChild(item);
                                // ntchild(3)
                            }
                            //点击超链接,跳转网页
                            $("ul>li>a").on("click",function(){
                                // console.log("item:"+ list[i])
                                alert($(this).text())
                                for(var i=0;i<dataList.length;i++){
                                    if(dataList[i].NAME==$(this).text()){
                                        alert(dataList[i].DZ)   
                                        gsp.rtf.func.openUrl({
                                            id:dataList[i].ID,
                                            name:dataList[i].NAME,
                                            url:dataList[i].DZ,
                                            // url:href,
                                            reload:true
                                           });
                                    }
                                }

                            })
                        }
                        //模糊匹配的时候如果不区分大小写,可以使用toLowerCase()或者toUpperCase()转换之后去匹配。
                        //模糊查询1:利用字符串的indexOf方法
                        function searchByIndexOf(keyWord, list){
                            if(!(list instanceof Array)){
                                return ;
                            }
                            var len = list.length;
                            var arr = [];
                            for(var i=0;i<len;i++){
                                //如果字符串中不包含目标字符会返回-1
                                if(list[i].indexOf(keyWord)>=0){
                                    arr.push(list[i]);
                                }
                            }
                            return arr;
                        }
                        // 使用正则匹配实现模糊查询
                        function searchByRegExp(keyWord, list){
                            if(!(list instanceof Array)){
                                return ;
                                // cconsole.log("不是数组")
                            }
                            var arr = [];
                            var reg = new RegExp(keyWord);
                            console.log("reg"+reg)
                            for(var i=0;i<list.length;i++){
                                //如果字符串中不包含目标字符会返回-1
                                if( list[i].match(reg)){
                                    arr.push(list[i]);
                                    console.log(list[i])
                                }
                            }
                            return arr;
                        }
                   } else {
                       $.messager.alert('提示', '获取数据集失败!', 'error');
                       return null;
                   }
               } catch (e) {
                   console.log('error:' + json + '!!!' + e);
                   // ajaxComplete() 方法规定 AJAX 请求完成时运行的函数。
                   complete(null);
                   //return;
               }
       }
       // 失败的回调函数
       var errorCall = function (err) {
           if (err.responseText.length == 39) {
               gsp.rtf.errorHandler.gspExHander({ ErrorType: 'InvalidContextException', Message: '用户身份信息已丢失' });
           }
           //complete(err);
           return false;
       }
 // 这是调用数据集的方法,类似ajax,只是提供数据
       //数据集编号  fontFamily:'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...fontStyle:'normal' 'italic' 'oblique'  fontWeight:'normal' 'bold' 'bolder'  'lighter'
       // var bh = "test11"; 
       var bh = "CS0_PC_FUNC";
       //参数
       var parastr = BA.getUrlParaParam("PARA");
       //var parastr = "";
       var options = { assembly: 'Genersoft.BI.Biz.Web', className: 'Genersoft.BI.Biz.Web.WebDataSvr', method: 'GetPartConfigComponent', params: [bh] };
   
       var vsJsonPara = { "functionname": "GetDataByCodeOrID", "code": bh, dfParas: parastr, "pageID": BA.GetPageFileID(), "noUseCache": BA.GetNoUseCache() };
       if (!bh && id) {
           vsJsonPara = { "functionname": "GetDataByCodeOrID", "id": id, dfParas: parastr, "pageID": BA.GetPageFileID(), "noUseCache": BA.GetNoUseCache() };
       }
       var url = "/cwbase/web/session/BA/Request/ChartPart.ashx";		
       options.BAloadoptions = {
           type: "POST",
           url: url,
           dataType: "text",
           data: vsJsonPara
       };
       BA.BAinvoke(options, successCall, errorCall);
      }
   
   

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模糊查询</title>
    <script src="jquery-1.7.2.js"></script>
    <style>
        *{
            list-style: none;
            padding:0;
            margin:0;
        }
        div{
            text-align: center;
            padding-top:20px;
        }
        ul{
            padding-top:20px;
            width:30%;
            margin:0 50% 0 35%;
        }
        li{
            padding:3px;
            border:1px solid silver;
            box-shadow: 1px 1px;
        }
    </style>
</head>
<body>
<div>
    <input type="text" id="txt">
    <button type="button" id="btn">search</button>
    <ul id="list">
 
    </ul>
</div>
<script>
    /**
     * Created by Steven on 2016-10-25.
     */
    var oTxt = document.getElementById('txt');
    var oBtn = document.getElementById('btn');
    var oList = document.getElementById('list');
 
    var fruits = ["桃子","苹果","梨子","香蕉","香瓜","葡萄","柠檬","橘子","草莓","草莓子","我真棒","s","ssr"];
    //点击事件
    oBtn.addEventListener('click', function(){
        var keyWord = oTxt.value;
        // var fruitList = searchByIndexOf(keyWord,fruits);
        var fruitList = searchByRegExp(keyWord, fruits);
        console.log(fruitList);
        renderFruits(fruitList);
        // if(!(fruitList instanceof Array)){
        //     return ;
        //     }
        //     oList.innerHTML = '';
        //     var len = fruitList.length;
        //     var item = null;
        //     for(var i=0;i<len;i++){
        //         item = document.createElement('li');
        //         item.innerHTML = fruitList[i];
        //         oList.appendChild(item);
        //     }
    }, false);
    //回车查询
    oTxt.addEventListener('keydown', function(e){
        if(e.keyCode == 13){
            var keyWord = oTxt.value;
            // var fruitList = searchByIndexOf(keyWord,fruits);
            var fruitList = searchByRegExp(keyWord, fruits);
            renderFruits(fruitList);
            
        }
    }, false);
    var cpLock = false;
    $('#txt').on('compositionstart', function () {
        cpLock = true;
        console.log("不搜索")
    });
    $('#txt').on('compositionend', function () {
        cpLock = false;
        console.log("汉字搜索");
        var keyWord = oTxt.value;
        // var fruitList = searchByIndexOf(keyWord,fruits);
        var fruitList = searchByRegExp(keyWord, fruits);
        renderFruits(fruitList)
        
    });
    $('#txt').on('input', function () {
        if (!cpLock) {
            console.log("字母搜索")
            var keyWord = oTxt.value;
            // var fruitList = searchByIndexOf(keyWord,fruits);
            var fruitList = searchByRegExp(keyWord, fruits);
            renderFruits(fruitList);
            }
    });
    // 渲染列表
    function renderFruits(list){
        if(!(list instanceof Array)){
            return ;
        }
        oList.innerHTML = '';
        var len = list.length;
        var item = null;
        for(var i=0;i<len;i++){
            item = document.createElement('li');
            item.innerHTML = list[i];
            oList.appendChild(item);
          
            // ntchild(3)
        }
        $("ul>li").on("click",function(){
            // console.log("item:"+ list[i])
            alert($(this).text())
        })
    }
    //模糊匹配的时候如果不区分大小写,可以使用toLowerCase()或者toUpperCase()转换之后去匹配。
 
    //模糊查询1:利用字符串的indexOf方法
    function searchByIndexOf(keyWord, list){
        if(!(list instanceof Array)){
            return ;
        }
        var len = list.length;
        var arr = [];
        for(var i=0;i<len;i++){
            //如果字符串中不包含目标字符会返回-1
            if(list[i].indexOf(keyWord)>=0){
                arr.push(list[i]);
            }
        }
        return arr;
    }
    //正则匹配
    function searchByRegExp(keyWord, list){
        if(!(list instanceof Array)){
            return ;
        }
        var len = list.length;
        var arr = [];
        var reg = new RegExp(keyWord);
        for(var i=0;i<len;i++){
            //如果字符串中不包含目标字符会返回-1
            if(list[i].match(reg)){
                arr.push(list[i]);
            }
        }
        return arr;
    }
    // renderFruits(fruits);
</script>
</body>
</html>
  • 0
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值