【问题标题】:jQuery Json filter with search input without using any filter plugin带有搜索输入的 jQuery Json 过滤器,不使用任何过滤器插件
【发布时间】:2015-09-05 05:24:09
【问题描述】:

我可以在html 视图中显示Json 数据,但是当我在search 输入框中输入时,我现在如何根据firstname 显示filter json 数据列表,请帮助我,我是新手到javascript & jQuery

HTML

<input type="search" name="search" id="search" value="" />
<div id="placeholder"></div>

Javascript/jQuery

var data={"users":[
        {
            "firstName":"Ray",
            "lastName":"Villalobos",
            "joined": {
                "month":"January",
                "day":12,
                "year":2012
            }
        },
        {
            "firstName":"John",
            "lastName":"Jones",
            "joined": {
                "month":"April",
                "day":28,
                "year":2010
            }
        }
]}

$(data.users).each(function() {
    var output = "<ul><li>" + this.firstName + " " + this.lastName + "--" + this.joined.month+"</li></ul>";
    $('#placeholder').append(output);
});

这里是fiddle

【问题讨论】:

    标签: javascript jquery json filter


    【解决方案1】:

    你可以使用以下

    var data = {
        "users": [{
            "firstName": "Ray",
                "lastName": "Villalobos",
                "joined": {
                "month": "January",
                    "day": 12,
                    "year": 2012
            }
        }, {
            "firstName": "John",
                "lastName": "Jones",
                "joined": {
                "month": "April",
                    "day": 28,
                    "year": 2010
            }
        }]
    }
    
    $(data.users).each(function () {
        var output = "<ul><li>" + this.firstName + " " + this.lastName + "--" + this.joined.month + "</li></ul>";
        $('#placeholder').append(output);
    });
    $('#search').change(function () {
        var yourtext = $(this).val();
        if (yourtext.length > 0) {
            $("li:contains(" + yourtext + ")").addClass('notify');
        }
        else{
            $("li:contains(" + yourtext + ")").removeClass('notify');
        }
    });
    .notify{
        border: 1px solid red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="search" name="search" id="search" value="" />
    <div id="placeholder"></div>

    更新日期

    var data = {
        "users": [{
            "firstName": "Ray",
                "lastName": "Villalobos",
                "joined": {
                "month": "January",
                    "day": 12,
                    "year": 2012
            }
        }, {
            "firstName": "John",
                "lastName": "Jones",
                "joined": {
                "month": "April",
                    "day": 28,
                    "year": 2010
            }
        }]
    }
    
    $(data.users).each(function () {
        var output = "<ul><li>" + this.firstName + " " + this.lastName + "--" + this.joined.month + "</li></ul>";
        $('#placeholder').append(output);
    });
    $('#search').keyup(function () {
        var yourtext = $(this).val();
        if (yourtext.length > 0) {
            $("li:not(:contains(" + yourtext + "))").hide();
        }
        else{
            
            $("li").show();
        }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="search" name="search" id="search" value="" />
    <div id="placeholder"></div>

    更新日期 2

    var data = {
        "users": [{
            "firstName": "Ray",
                "lastName": "Villalobos",
                "joined": {
                "month": "January",
                    "day": 12,
                    "year": 2012
            }
        }, {
            "firstName": "John",
                "lastName": "Jones",
                "joined": {
                "month": "April",
                    "day": 28,
                    "year": 2010
            }
        }]
    }
    
    $(data.users).each(function () {
        var output = "<ul><li>" + this.firstName + " " + this.lastName + "--" + this.joined.month + "</li></ul>";
        $('#placeholder').append(output);
    });
    $('#search').keyup(function () {
        var yourtext = $(this).val();
        if (yourtext.length > 0) {
            var abc = $("li").filter(function () {
                var str = $(this).text();
                var re = new RegExp(yourtext, "i");
                var result = re.test(str);
                if (!result) {
                    return $(this);
                }
            }).hide();
        } else {
            $("li").show();
        }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="search" name="search" id="search" value="" />
    <div id="placeholder"></div>

    【讨论】:

    • 感谢您的回答,但请您更新一下,当我们在搜索框中键入自动建议时,它会根据搜索值显示过滤列表。
    • 但是为什么输入需要区分大小写,比如当我输入“ray”时它不显示列表,但是当我输入“Ray”时它显示第一个列表。
    • 我认为contains selectorcase sensitive
    • 所以有可能删除区分大小写的行为。
    • @Amit 找到最新的 2 版本。
    【解决方案2】:

    使用$.grep

    看这个例子:http://jsfiddle.net/kevalbhatt18/ejPV4/317/

    var data={"users":[
            {
                "firstName":"Ray",
                "lastName":"Villalobos",
                "joined": {
                    "month":"January",
                    "day":12,
                    "year":2012
                }
            },
            {
                "firstName":"John",
                "lastName":"Jones",
                "joined": {
                    "month":"April",
                    "day":28,
                    "year":2010
                }
            }
    ]}
    
    var found_names = $.grep(data.users, function(v) {
        return v.firstName === "John" ;
    });
    
    console.log(found_names);
    


    编辑

    看这个带有按键事件的小提琴。

    http://jsfiddle.net/kevalbhatt18/ejPV4/320/

    【讨论】:

    • 但是在这里您使用的是搜索按钮,是否可以在没有搜索按钮的情况下过滤数据,例如 key-typekeyup
    • 如果你清除文本,那么你会得到旧数据,在按键中它会找到数据
    • 是的,我现在可以看到,但是如果我像第一个数据列表那样只键入“r”或“R”或“ra”,是否无法显示数据列表。
    • @amit 我认为您可以在项目中使用 select2,它会自动进行过滤和搜索更多功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多