JSON Jquery案例不敏感匹配

时间:2012-02-24 17:22:22

标签: javascript jquery json

我有以下JSON和Jquery代码:

JSON

{
    "employees":[
        {
            "name": "Sandy"
        },
        {
            "name": "Megan"
        },  
        {
            "name": "Pat"
        },
        {
            "name": "Susan"
        }
    ]
}

JQuery的

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="js/jquery-1.6.4.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                jQuery.ajax({
                    type: "GET",
                    url: "myJson.json",
                    dataType: "json",
                    async: "true",
                    contentType: "application/x-javascript; charset=utf-8",
                    cache: "false",
                    success: function(response){
                        $("input#myInput").live("keyup", function(e){

                            var val = $("input#myInput").val();
                            var len = $("input#myInput").val().length;

                            for (var x = 0; x < response.employees.length; x++) {

                                var empName = response.employees[x].name;
                                var valChar = val.substring(0, len);
                                var nameChar = empName.substring(0, len);

                                if (nameChar.search(valChar) != -1) {
                                    $("ul#myList").append("<li>" + empName + "</li>");
                                }                               
                            }
                        });
                    }
                })
            })
        </script>
    </head>
    <body>
        <input type="text" width="25" id="myInput">
        <ul id="myList"></ul>
    </body>
</html>

我想做什么

当我在输入字段中键入一个字符(如M / P / S)时,它应循环遍历JSON文件并返回匹配的结果。所以,

  • M将返回Megan
  • S将返回Sandy和Susan
  • P将返回Pat

问题

目前,我的代码正在运行。但只有当我以大写字母输入字符时。如果我输入m / p / s,则不会返回任何内容。

如何使这种不区分大小写的方式使其适用于

  • M / P / S
  • M / P / S

2 个答案:

答案 0 :(得分:1)

修改:代码中的一些改进

  1. val和val.substring(0,len)是一样的,所以你不需要做substring,因为len是从val计算的。
  2. 您不需要进行搜索,因为您使用子字符串并获得val的确切长度..因此您可以进行简单的==比较

       for (var x = 0; x < resp.employees.length; x++) {
    
            var empName = resp.employees[x].name;
            var valChar = val.toLowerCase();
            var nameChar = empName.substring(0, len).toLowerCase();
    
            if (nameChar === valChar) {
                $("ul#myList").append("<li>" + empName + "</li>");
            }                               
        }
    
  3. 更新了DEMO

    更改你的for循环,如下所示,

            for (var x = 0; x < resp.employees.length; x++) {
    
                var empName = resp.employees[x].name;
                var valChar = val.substring(0, len).toLowerCase();
                var nameChar = empName.substring(0, len).toLowerCase();
    
                if (nameChar.search(valChar) != -1) {
                    $("ul#myList").append("<li>" + empName + "</li>");
                }                               
            }
    

    DEMO

答案 1 :(得分:0)

看看.toUpperCase() IE浏览器,     if(val.toUpperCase()== search.toUpperCase())