• JQuery实现模糊查询关键字高亮输入框


    这事还得从产品经理说起......

      1 <!doctype html>
      2 <html>
      3     <head>
      4         <meta charset="utf-8">
      5         <title>模糊查询关键字高亮输入框</title>
      6     </head>
      7     <style>
      8         * {        
      9         margin:0;
     10         padding:0;
     11         font-size: 16px;
     12         }
     13         ul li {
     14             list-style:none;
     15         }
     16     
     17         input {
     18             border: none;
     19             outline: medium;
     20             background-color: transparent;
     21             /* 去掉背景 */
     22         }
     23     
     24         .left{
     25             float: left;
     26         }
     27     
     28         .right{
     29             float: right;
     30         }
     31     
     32         .none{
     33             display: none;
     34         }
     35     
     36         .box_select{
     37             width: 500px;
     38             margin: 50px auto;
     39         }
     40     
     41         #searchInput{
     42             padding:0 10px;
     43             width: 200px;
     44             height: 40px;
     45             line-height: 10px;
     46             border: 1px solid #E6E6E6;
     47         }
     48     
     49         #content{
     50             max-height: 200px;
     51             line-height: 40px;
     52             border: 1px solid #E6E6E6;
     53             border-top: none;
     54             position: absolute;
     55         }
     56     
     57         #content li{
     58             padding:0 10px;
     59             width: 200px;
     60             line-height: 40px;
     61         }
     62     
     63         #content li:hover{
     64             background-color: #EFF0F5; 
     65         }
     66     
     67         .highlight {
     68             font-weight: bold;
     69             color: #1DB1CF;
     70         }
     71     </style>
     72     <body>
     73         <div class="box_select">
     74             <div class="box1_select left">
     75                 <input id="searchInput" type="text" placeholder="请输入123试试" class="searchInput">
     76                 <ul id="content">
     77 
     78                 </ul>
     79             </div>
     80             <div class="box2_data right">
     81                 <h3>这个相当于数据库(设置属性display:none;隐藏掉)</h3>
     82                 <ul id="data_select" class="data_select">
     83                     <li>1</li>
     84                     <li>2</li>
     85                     <li>3</li>
     86                     <li>123</li>
     87                     <li>网页设计</li>
     88                     <li>UI设计和WEB前端开发员</li>
     89                     <li>web前端开发工程师</li>
     90                     <li>设计</li>
     91                     <li>Javascript</li>
     92                     <li>Html/Html5/Xml</li>
     93                     <li>Css/Css3</li>
     94                     <li>Bootstrap</li>
     95                     <li>angularJS</li>
     96                     <li>java开发工程师</li>
     97                     <li>HTML5页面开发</li>
     98                     <li>ios开发</li>
     99                 </ul>
    100             </div>
    101         </div>
    102 
    103         <script src="https://libs.baidu.com/jquery/1.9.1/jquery.min.js" type="text/javascript" charset="utf-8"></script>
    104         <script type="text/javascript" charset="utf-8">
    105             function highlight(s, id) {
    106                 if (s.length == 0) {
    107                     var obj = document.getElementById(id);
    108                     var t = obj.innerHTML.replace(/<spans+class=.?highlight.?>([^<>]*)</span>/gi, "$1");
    109                     obj.innerHTML = t;
    110                     return false;
    111                 }
    112                 s = encode(s);
    113                 var obj = document.getElementById(id);
    114                 var t = obj.innerHTML.replace(/<spans+class=.?highlight.?>([^<>]*)</span>/gi, "$1");
    115                 obj.innerHTML = t;
    116                 var cnt = loopSearch(s, obj);
    117                 t = obj.innerHTML
    118                 var r = /{searchHL}(({(?!/searchHL})|[^{])*){/searchHL}/g
    119                 t = t.replace(r, "<span class='highlight'>$1</span>");
    120                 obj.innerHTML = t;
    121 
    122                 function encode(s) {
    123                     return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/([\.*[]()$^])/g, "\$1");
    124                 }
    125 
    126                 function decode(s) {
    127                     return s.replace(/\([\.*[]()$^])/g, "$1").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&");
    128                 }
    129 
    130                 function loopSearch(s, obj) {
    131                     var cnt = 0;
    132                     if (obj.nodeType == 3) {
    133                         cnt = replace(s, obj);
    134                         return cnt;
    135                     }
    136                     for (var i = 0, c; c = obj.childNodes[i]; i++) {
    137                         if (!c.className || c.className != "highlight") {
    138                             cnt += loopSearch(s, c);
    139                         }
    140 
    141                     }
    142                     return cnt;
    143                 }
    144 
    145                 function replace(s, dest) {
    146                     var r = new RegExp(s, "g");
    147                     var tm = null;
    148                     var t = dest.nodeValue;
    149                     var cnt = 0;
    150                     if (tm = t.match(r)) {
    151                         cnt = tm.length;
    152                         t = t.replace(r, "{searchHL}" + decode(s) + "{/searchHL}")
    153                         dest.nodeValue = t;
    154                     }
    155                     return cnt;
    156                 }
    157             }
    158         </script>
    159         <script>
    160             $(function() {
    161                 var arr = [];
    162                 $('#data_select').children().each(function() {
    163                     var liText = $(this).text();
    164                     arr.push(liText);
    165                 });
    166 
    167                 $('#searchInput').on('keyup', function() {
    168                     $('#content').find("li").remove();
    169                     $('#content').show();
    170                     var searchInput = $('#searchInput').val();
    171                     for (var i = 0; i < arr.length; i++) {
    172                         if ((arr[i].indexOf(searchInput)) != -1) {
    173                             $('#content').append($('<li onclick="removeUl(this)">' + arr[i] + '</li>'));
    174                         }
    175                     };
    176                     var s = $(this).val();
    177                     var regu = /^[ ]+$/;
    178                     if (!regu.test(s)) {
    179                         highlight(s, "content");
    180                     };
    181 
    182                 });
    183 
    184                 $('#content').on('click', 'li', function() {
    185                     $('#searchInput').val($(this).text());
    186                 });
    187 
    188                 removeUl = function() {
    189                     $('#content').hide();
    190                 };
    191 
    192                 $(document).keyup(function(event) {
    193                     var txt_value = $("#searchInput").val(); //获取地址文本框的值
    194                     if (txt_value == "") {
    195                         $('#content').hide();
    196                     }
    197                 });
    198 
    199             });
    200         </script>
    201     </body>
    202 </html>

    好吧,就这样啦....(jq22上找的hLight.js插件)

    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    分组排序并显示序号
    power-design--tables-export-usage
    cache implement
    get system properties
    jbpm
    JVM内存管理机制和垃圾回收机制
    java读取excel
    Java编程中“为了性能”尽量要做到的一些地方
    json串与java对象互转
    apidoc的使用
  • 原文地址:https://www.cnblogs.com/antao/p/12516254.html
Copyright © 2020-2023  润新知