<div>
   <ul>
      <li id="0">冬瓜很好吃</li>
      <li id="1">西瓜不好吃</li>
      <li id="2">南瓜很好吃</li>
      <li id="3">苦瓜很好吃</li>
      <li id="4">傻瓜怎么吃</li>
      <li id="5">冬天的瓜很好吃</li>
   </ul>
</div
  
就是说:
当我输入“冬”的时候 id=0和id=1会显示,  
当我输入“很”的时候 id=0,id=2,id=3,id=5会显示
当我输入 “冬瓜很好吃” 只有id=0会显示 
用jquery 有没有与mysql里面的 like 一样的属性。 求解

解决方案 »

  1.   


    ///为字符串添加模糊比较的方法
    String.prototype.isLike = function(exp/*类似于SQL中的模糊查询字符串*/, i/*是否区分大小写*/) {
            var str = this;
            i = i == null ? false : i;
            if (exp.constructor == String) {            /*首先将表达式中的‘_’替换成‘.’,但是‘[_]’表示对‘_’的转义,所以做特殊处理*/
                var s = exp.replace(/_/g, function(m, i) {
                    if (i == 0 || i == exp.length - 1) {
                        return ".";
                    }
                    else {
                        if (exp.charAt(i - 1) == "[" && exp.charAt(i + 1) == "]") {
                            return m;
                        }
                        return ".";
                    }
                });
                 /*将表达式中的‘%’替换成‘.’,但是‘[%]’表示对‘%’的转义,所以做特殊处理*/
                s = s.replace(/%/g, function(m, i) {
                    if (i == 0 || i == s.length - 1) {
                        return ".*";
                    }
                    else {
                        if (s.charAt(i - 1) == "[" && s.charAt(i + 1) == "]") {
                            return m;
                        }
                        return ".*";
                    }
                });            /*将表达式中的‘[_]’、‘[%]’分别替换为‘_’、‘%’*/            s = s.replace(/\[_\]/g, "_").replace(/\[%\]/g, "%");            /*对表达式处理完后构造一个新的正则表达式,用以判断当前字符串是否和给定的表达式相似*/            var regex = new RegExp("^" + s, i ? "" : "i");
                return regex.test(this);
            }
            return false;
        };///为数组添加模糊查询方法
     Array.prototype.selectLike = function(exp/*类似于SQL中的模糊查询字符串*/, fun) {
            var arr = [];
            if (fun && fun.constructor == Function) {
                for (var i = 0; i < this.length; i++) {
                    if (fun(this[i], exp)) {
                        arr.push(i);
                    }
                }
            }
            else {
                for (var i = 0; i < this.length; i++) {
                    if (this[i].isLike(exp, false)) {
                        arr.push(i);
                    }
                }
            }
            return arr;
        };使用示例:var strArr=['冬瓜很好吃','西瓜不好吃','南瓜很好吃','苦瓜很好吃','傻瓜怎么吃','冬天的瓜很好吃'];//把要模糊查询的所有字符串做成一个数组;var indexArr1=strArr.selectLike('冬');//结果为[0,5],//返回的是符合要求的下标数组,根据下标访问原始数组就得到结果了,当然略微改一下,直接返回符合要求的字符串也可以;
    var indexArr2=strArr.selectLike('很');//结果为[0,2,3,5]
      

  2.   

    <style type="text/css">
        li{display: none}
    </style>
    <ul>
        <li id="0">冬瓜很好吃</li>
        <li id="1">西瓜不好吃</li>
        <li id="2">南瓜很好吃</li>
        <li id="3">苦瓜很好吃</li>
        <li id="4">傻瓜怎么吃</li>
        <li id="5">冬天的瓜很好吃</li>
    </ul>
    <input type="text" onkeyup="finds(this.value)">
    <script type="text/javascript">
        var s="";
        function finds(v){
            if(v!=s&&v!=""){
                $("li").hide();
                $("li:contains('"+v+"')").show();
            s=v;
            }
        }
    </script>
      

  3.   

    我楼上朋友的答案就已经可以了
    主要是使用:contains
    1:如果要非空检测,则使用下面的
    $(function(){
     $('#你的输入框ID').keyup(function(){$("li").hide();if($(this).val().length>0){$("li:contains('"+$(this).val()+"')").show()}});
    })
    2:如果允许默认输入为空时显示所有的,则使用下面的
    $(function(){$('#你的输入框ID'').keyup(function(){$("li").hide();$("li:contains('"+$(this).val()+"')").show()});
    })
      

  4.   

    高手 麻烦一下 我如果不需要隐藏 我想改变颜色  怎么做呢
    当我输入“冬”的时候 id=0和id=5会变颜色,  
    当我输入“很”的时候 id=0,id=2,id=3,id=5会变颜色
    当我输入 “冬瓜很好吃” 只有id=0会变颜色
      

  5.   

    <ul>
        <li id="0">冬瓜很好吃</li>
        <li id="1">西瓜不好吃</li>
        <li id="2">南瓜很好吃</li>
        <li id="3">苦瓜很好吃</li>
        <li id="4">傻瓜怎么吃</li>
        <li id="5">冬天的瓜很好吃</li>
    </ul>
    <input type="text" onkeyup="finds(this.value)">
    <script type="text/javascript">
        var s="";
        function finds(v){
            if(v!=s&&v!=""){
                $("li").css("color","#000");
                $("li:contains('"+v+"')").css("color","red");
            s=v;
            }
        }
    </script>