惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Schneier on Security
A
Arctic Wolf
Scott Helme
Scott Helme
S
Securelist
Schneier on Security
Schneier on Security
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
Security Latest
Security Latest
Project Zero
Project Zero
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
C
Check Point Blog
F
Full Disclosure
Stack Overflow Blog
Stack Overflow Blog
H
Hacker News: Front Page
T
The Blog of Author Tim Ferriss
TaoSecurity Blog
TaoSecurity Blog
Vercel News
Vercel News
A
About on SuperTechFans
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security Affairs
Y
Y Combinator Blog
T
The Exploit Database - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Forbes - Security
Forbes - Security
IT之家
IT之家
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
Jina AI
Jina AI
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
K
Kaspersky official blog
Hacker News: Ask HN
Hacker News: Ask HN
C
Cisco Blogs
MyScale Blog
MyScale Blog
博客园 - 【当耐特】
T
Threat Research - Cisco Blogs
D
Docker
G
GRAHAM CLULEY

博客园 - 爱跳舞的程序员

freemarker对数字格式的处理 FilePathJaxbUtil(xml文件转JavaBean对象工具) freemarker对日期的处理 PL_SQL常用快捷键 将博客搬至CSDN css+jquery右下角弹框提示框(工作需要就开发调式了) textarea文本居中的问题 bat批量复制文件(一键打包更新代码,避免手动一个个复制) url特殊字符传递参数解决方法(特指超链接) js 拼接字符串带变量(js方法参数单双引号拼接的问题记录) 表单提交由submit改为异步的方式 解决复制select下拉框时 值没法复制的问题 Jquery操作select汇总 博文阅读密码验证 - 博客园 ztree树添加右击菜单 ligerLayout布局(左右分栏) displayTag解决中文排序、和翻页查询出错的问题 jquery之ztree树入门(输出最简单树形) java 根据word xml模板生成word(个人v2版本)
模糊查询+首字母查询组合框
爱跳舞的程序员 · 2023-04-25 · via 博客园 - 爱跳舞的程序员

<span class="label">站名称:</span>
        <div id="selectMain"  >
                      <input id="myInputOne"   name="Q_bdzmc_S" 
                              onkeyup="InputAndSelect.keyupPySearch1('myUl','myInputOne','suggest','selectStation','myInputTwo');" 
                          onblur="InputAndSelect.isInputing = false;InputAndSelect.blurPySearch('suggest','myInputOne','请输入站或站首字母');"  
                              onfocus="InputAndSelect.focusPySearch(this,'suggest','myInputOne','请输入站或站首字母');"
                          >
                      <div id="suggest" > 
                        <ul  id="myUl" ></ul>
                    </div> 
                      <input type="hidden" id="myInputTwo" name="myInputTwo"   >
            </div>

html相关代码

<style>
#myUl {
    padding: 0;
    margin: 0;
    list-style: none;
    padding-left: 3px;
    cursor: pointer;
    line-height: 25px;
    text-align: left;
    overflow: auto;
    overflow-x: hidden;
/*     background-color: blue; */
    background-color: white;
    max-height: 150px;
}

#suggest {
    padding: 0;
    list-style: none;
    cursor: pointer;
    line-height: 25px;
    text-align: left;
    position: absolute;
    width: 185px;
    background-color: yellow;
}

#myInputOne {
    width: 185px;
    position: relative;
/*     float: center; */
display: inline-block
    background-color: red;
}

#selectMain {
    position: relative;
    z-index: 99999;
    width: 200px;
/*     background: gray; */
    background: white;
    display: inline-block
}
</style>

css相关代码

InputAndSelect = {
    isSelecting : false,
    isInputing : false,
    /**
     * 初始化拼音检索数据源
     * @param myUl 下拉列表ul的id
     * @param myInputOne 下拉列表输入框id(如用户名的ID)
     * @param suggest 下拉列表ul父节点div的id
     * @param inputVal 下拉输入框输入内容
     * @param type 类型,选择用户、功能模块、功能名称
     * @param myInputTwo 选择用户时 对应的是存储userId的字段
     * 
     * InputAndSelect.initPyDataSource(myUl, myInputOne, suggest,$("#"+myInputOne).val(),type,myInputTwo);
     */
    initPyDataSource : function(myUl, myInputOne, suggest,inputVal, type, myInputTwo) {
        
        //先清空ul
        // 拼音检索下拉列表对象
        var dataSourceList = document.getElementById(myUl);
        // 初始化自定义组合框下拉框数据
        dataSourceList.innerHTML = "";
        
        if (type == 'selectxxx') {
        } else if (type == 'selectStation') {
            InputAndSelect.selectStation(myUl, myInputOne,suggest, inputVal, myInputTwo);
        }
    },
    
    
    /**
     * 初始化拼音检索数据源(选择变电站)
     * @param myUl 下拉列表ul的id
     * @param myInputOne 下拉列表输入框id
     * @param suggest 下拉列表ul父节点div的id
     * @param inputVal 下拉输入框输入内容
     */
    selectStation:function(myUl,myInputOne,suggest,inputVal,myInputTwo){
//        alert(1);
        if(inputVal==''){
            return;
        }
        $.ajax({
            type:"post",
            url : __ctx+"/ytdyjcompare/Ytdyjykzzb/ytdyjykzzb/getResourceName_CZ.ht",
            data : {"name" : inputVal },
            dataType : "json",
            success : function(data){
                //拼音检索下拉列表对象
                var dataSourceList = document.getElementById(myUl);
                dataSourceList.innerHTML = "";
                //var myData = eval("("+data+")");
                var myData = InputAndSelect.getRealJsonData(data);
                //alert(myData);
                if(myData!=null && myData!='' && myData.length>0){
                    for (var i=0,xlbhLen=myData.length; i<xlbhLen; i++){
                        var obj = myData[i];
                        var li = document.createElement("li");
                        li.lang = i;
                        li.jp = '';
//                        li.innerHTML = decodeURIComponent(ms);
                        li.innerHTML =obj;
//                        li.id=czm;
                        li.id=obj;
//                        li.title=ms;
                        li.title=obj;
                        li.style.backgroundColor = "#FFFFFF";
                        li.onclick = function() {
                            document.getElementById(myInputOne).value = this.title;
                            document.getElementById(myInputTwo).value = this.id;
                            document.getElementById(suggest).style.display = "none";
                            document.getElementById(myUl).style.display = "none";
                        }
                        li.onmouseover = function() {
                            this.style.backgroundColor = "#EFEFEF";
                            this.style.fontWeight = "bold";
                        }
                        li.onmouseout = function() {
                            this.style.backgroundColor = "#FFFFFF";
                            this.style.fontWeight = "normal";
                        }
                        dataSourceList.appendChild(li);
                    }
                }else{
                    var li1 = document.createElement("li");
//                    li1.innerHTML = decodeURIComponent("没有添加模版,请联系管理员!");
                    li1.onclick = function() {
                        document.getElementById(suggest).style.display = "none";
                    }
                    dataSourceList.appendChild(li1);
                }
            }
        });
    },
     getRealJsonData:function(baseStr) {
        if (!baseStr || typeof baseStr != 'string') return;
        var jsonData = null;
        try {
            jsonData = JSON.parse(baseStr);
        } catch (err){
            return null;
        }
        var needReplaceStrs = [];
        InputAndSelect.loopFindArrOrObj(jsonData,needReplaceStrs);
        needReplaceStrs.forEach(function (replaceInfo) {
            var matchArr = baseStr.match(eval('/"'+ replaceInfo.key + '":[0-9]{15,}/'));
            if (matchArr) {
                var str = matchArr[0];
                var replaceStr = str.replace('"' + replaceInfo.key + '":','"' + replaceInfo.key + '":"');
                replaceStr += '"';
                baseStr = baseStr.replace(str,replaceStr);
            }
        });
        var returnJson = null;
        try {
            returnJson = JSON.parse(baseStr);
        }catch (err){
            return null;
        }
        return returnJson;
    },
    //遍历对象类型的
     getNeedRpStrByObj:function(obj,needReplaceStrs) {
        for (var key in obj) {
            var value = obj[key];
            if (typeof value == 'number' && value > 9007199254740992){
                needReplaceStrs.push({key:key});
            }
            InputAndSelect.loopFindArrOrObj(value,needReplaceStrs);
        }
    },

    //遍历数组类型的
     getNeedRpStrByArr:function(arr,needReplaceStrs) {
        for(var i=0; i<arr.length; i++){
            var value = arr[i];
            InputAndSelect.loopFindArrOrObj(value,needReplaceStrs);
        }
    },

    //递归遍历
     loopFindArrOrObj:function(value,needRpStrArr) {
        var valueTypeof = Object.prototype.toString.call(value);
        if (valueTypeof == '[object Object]') {
            needRpStrArr.concat(InputAndSelect.getNeedRpStrByObj(value,needRpStrArr));
        }
        if (valueTypeof == '[object Array]') {
            needRpStrArr.concat(InputAndSelect.getNeedRpStrByArr(value,needRpStrArr));
        }
    },
    
    /**
     * 自定义组合框的输入框keyup事件处理函数
     * @param p_obj 输入框对象
     * 
     * InputAndSelect.keyupPySearch(this,'suggest','myInputOne')
     * 
     * 经过测试,感觉此方法暂时没有什么用处
     */
    keyupPySearch : function(p_obj,suggest,myInputOne) {
        //拼音检索数据源div和列表对象
        var dataSourceDiv = document.getElementById(suggest);
        var dataSourceList = document.getElementById(myInputOne);
        var dataSourceChildList = dataSourceList.childNodes.length;
        var isExists = false;

        //如果输入框为空则显示数据源列表
        if (p_obj.value == "" || /\s/.test(p_obj.value)) {
            dataSourceDiv.style.display = "block";
            for ( var j = 0; j < dataSourceChildList; j++) {
                dataSourceList.childNodes[j].style.display = "block";
            }
        }
        if (dataSourceChildList > 0) {
            for (var i = 0; i < dataSourceChildList; i++) {
                var dataSourceChild = dataSourceList.childNodes[i];
                //输入的简拼或者名称在数据源中存在则显示,反之
                if (dataSourceChild.jp.indexOf(p_obj.value) == 0 || dataSourceChild.innerHTML.indexOf(p_obj.value) != -1) {
                    isExists = true;
                    dataSourceChild.style.display = "block";
                } else {
                    dataSourceChild.style.display = "none";
                }
            }
            if (isExists) {
                dataSourceDiv.style.display = "block";
            } else {
                dataSourceDiv.style.display = "none";
            }
        }
    },
    
    
    /**
     * 作用:鼠标点击输入框后,判断输入框的值,如果值还是提示信息“请输入站或站首字母”,则清空
     * 自定义组合框的输入框focus事件处理函数
     * @param p_obj 输入框对象
     * 
     *     οnfοcus="InputAndSelect.focusPySearch(this,'suggest','myInputOne','请输入站或站首字母');" 
     */
    focusPySearch : function(p_obj,suggest,myInputOne,tipVal) {
        InputAndSelect.isInputing = true;
        InputAndSelect.isSelecting = false;
        if (p_obj.value == tipVal) {
            p_obj.value = "";
        }
        //document.getElementById(searchId).onkeyup();
        
        
        //$("#"+myInputOne).keyup();
        //document.getElementById(suggest).style.display = "block";
    },

    /**
     * 作用:鼠标离开输入框时,给输入框提示信息   “请输入变电站或变电站首字母”
     * 
     * 自定义组合框的输入框blur事件处理函数
     *     οnblur="InputAndSelect.isSelecting = false;
     * InputAndSelect.blurPySearch('suggest','myInputOne','请输入变电站或变电站首字母');"
     * 
     */
    blurPySearch : function(suggest,searchId,tipVal) {
        //获取输入框对象
        var inputObj = document.getElementById(searchId);
        if (inputObj.value == "") {
            inputObj.value = tipVal;
        }
        
        setTimeout(function() {
            if (!InputAndSelect.isInputing && !InputAndSelect.isSelecting){
                document.getElementById(suggest).style.display = "none";
            }
        }, 250);
    },
    
    
    /**
     *<input id="ms"         οnkeyup="InputAndSelect.keyupPySearch1('myUl','myInputOne','suggest','selectStation','myInputTwo');
     *InputAndSelect.keyupPySearch(this,'suggest','myInputOne')"
     * 
     */
    keyupPySearch1: function(myUl,myInputOne,suggest,type,myInputTwo){
        InputAndSelect.initPyDataSource(myUl, myInputOne, suggest,$("#"+myInputOne).val(),type,myInputTwo);
    }
};

相关js代码,InputAndSelect.js

       @ResponseBody
        @RequestMapping("getResourceName_CZ")
        public String getResourceName_CZ(HttpServletRequest request, HttpServletResponse response) throws Exception {
            JSONArray json = new JSONArray();
            String keyWord = request.getParameter("name");

            List<String> list = getStationName_CZ();
            
            //去掉重复站
            Set<String> list2 = new java.util.HashSet<String>();
//            System.out.println("变电站==进来了吗"+keyWord);
            for (int i = 0; i < list.size(); i++) {
//                System.out.println("变电站=="+list.get(i));
                String s = list.get(i);
                if (s.contains("站")) {
                    s=s.substring(0, s.indexOf("站")+1);
                }
                list2.add(s);
            }
            if (list2 != null && !list2.isEmpty()) {
                for (String s : list2) {
                    Pattern pattern = Pattern.compile("^.*" + keyWord + ".*$", Pattern.CASE_INSENSITIVE);
                    if (StringUtil.isNotEmpty(s)&& (pattern.matcher(s).matches()|| pattern.matcher(getFirstSpell(s)).matches())) {
                        json.add(s);
                    }
                }
            }
            return json.toString();
        }


    /**
     * @return 
     * List<String>
     *  查询本地所有站名
     */
    public  List<String>  getStationName_CZ() {
        List<String> list = new ArrayList<String>();
        String sql="select distinct F_BDZMC from W_YTDYJYKCZB";
        List<Map<String,Object>> queryForList = jdbcTemplate.queryForList(sql);
        if (queryForList != null) {
            for(Map<String, Object> map : queryForList){
                Object object = map.get("F_BDZMC");
                if (object!=null) {
                    list.add((String) object);
                }
            }
        }
        return  list;
    }
    
 // 汉字首字母拼音
     public static String getFirstSpell(String wordsStr) {
         StringBuffer pybf = new StringBuffer();
         char[] arr = wordsStr.toCharArray();
         HanyuPinyinOutputFormat hanyuFormat = new HanyuPinyinOutputFormat();
         hanyuFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
         hanyuFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
         for (int i = 0; i < arr.length; i++) {
             if (String.valueOf(arr[i]).matches("[\\u4E00-\\u9FA5]+")) {
                 try {
                     String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], hanyuFormat);
                     if (null != temp) {
                         pybf.append(temp[0].charAt(0));
                     }
                 } catch (BadHanyuPinyinOutputFormatCombination e) {
                     e.printStackTrace();
                 }
             } else {
                 pybf.append(arr[i]);
             }
         }
         return pybf.toString().replaceAll("\\W", "").trim();
     }

java后端