简体   繁体   English

jQuery匹配JSON数据

[英]Jquery match for json data

I'm trying to pull out data from my json using match() in my search function. 我正在尝试使用我的搜索功能中的match()从json中提取数据。 Here's what I want to do using the string inputted in the textbox. 这是我要使用在文本框中输入的字符串执行的操作。 It would then pull out data from my json array as long as there is a match. 只要有匹配项,它将从我的json数组中提取数据。 Here's what I have so far: 这是我到目前为止的内容:

var data = [{
    "RM_Name": "Russ Martin",
    "Division": "East",
    "RM_Phone": "(603) 491-1259",
    "RC_Name": "Jacob Sucoff",
    "RC_Phone": "(800) 247-4154 x3403",
    "States_Covered": "MT,VT, NH, ME  (all firms)",
    "Latitude": 46.6797995,
    "Longitude": -110.044783,
    "Coordinates": "46.6797995,-110.044783"
}, {
    "RM_Name": "Carey Fortnam",
    "Division": "East",
    "RM_Phone": "(585)-259-7394",
    "RC_Name": "Matt Wrzesniewsky",
    "RC_Phone": "(800) 247-4154 x3088",
    "States_Covered": "NY- Upstate ex Rockland County (BD, FP)",
    "Latitude": 40.7056308,
    "Longitude": -73.9780035,
    "Coordinates": "40.7056308,-73.9780035"

}];

$.each(data, function(i, item) {
    var rm_name = item.RM_Name,division = item.Division,rm_phone = item.RM_Phone,rc_name = item.RC_Name,rc_phone = item.RC_Phone,states = item.States_Covered;

    var dataset='<tr class="'+rm_name+' '+rc_name+'"><td>'+rm_name+'</td><td>'+division+'</td><td>'+rm_phone+'</td><td>'+rc_name+'</td><td>'+rc_phone+'</td><td>'+states+'</td></tr>';

    $('.rm-data').append(dataset);
});

$('#search').on('keypress', function (e) {
    if(e.which == 13) {   
        search();
    }
}).on('change', function (e) {
    search();
});

function search() {
    var query = $('#search').val();

    // empty?
    if(query === "")
    {
        $('.rm-data tr').show();
        return;
    }

    $('.rm-data tr').hide();
    $('.error-msg').hide();

    if ($('.rm-data tr').hasClass(query)) {
        $('.rm-data tr:contains(' + query + ')').fadeIn('slow', function () {
            $('.rm-data tr:contains(' + query + ')').slideDown().show();
        });
    }
    else {
        //JSON Match Finder
        $.getJSON(data, function (data) {
            $.each(data, function (i, item) {
                var test= item.RM_Name+' '+item.RC_Name;
                var regex = new RegExp(query);
                var test2 = test.match(regex);
                   console.dir(test2);

            });
        });

        var error = '<div class="error-msg">Contact Not Found</div>';
        $('.rm-table-search').append(error);
        if ($('.error-msg').length == 0) {
            $('.rm-table').append(error);
        }
        else {
            $('.rm-table').append('');
        }
    }          
}

I am able to find matches using this code but I cannot pull the data out. 我可以使用此代码找到匹配项,但无法提取数据。 Is there anyway I can do this? 反正我能做到这一点吗? Fiddle here. 在这里摆弄

Just sharing my output so far via console.log() 到目前为止,仅通过console.log()共享我的输出

["Ru", index: 0, input: "Russ MartinJacob Sucoff", $family: function, $constructor: function, pop: function…]
 ab-rm.js:80
6
null ab-rm.js:80
["Ru", index: 18, input: "Kevin GangMichael Rus", $family: function, $constructor: function, pop: function…]
 ab-rm.js:80
12
null ab-rm.js:80
["Ru", index: 0, input: "Russ CorbyNatasha Fomenko", $family: function, $constructor: function, pop: function…]
 ab-rm.js:80
8
null ab-rm.js:80
["Ru", index: 6, input: "Laura RupsisKenny Meyer", $family: function, $constructor: function, pop: function…]

I figured it out based on balexandre's idea: 我根据balexandre的想法弄清楚了:

$.each(data, function (i, item) {
    var rm_name = item.RM_Name,
        division = item.Division,
        rm_phone = item.RM_Phone,
        rc_name = item.RC_Name,
        rc_phone = item.RC_Phone,
        states = item.States_Covered;

    var dataset = '<tr class="' + rm_name + ' ' + rc_name + '"><td>' + rm_name + '</td><td>' + division + '</td><td>' + rm_phone + '</td><td>' + rc_name + '</td><td>' + rc_phone + '</td><td>' + states + '</td></tr>';

    $('.rm-data').append(dataset);
});

function search() {
    var query = $('#search').val();

    $('.rm-data tr').hide();
    $('.error-msg').hide();

    if ($('.rm-data tr').hasClass(query)) {
        $('.rm-data tr:contains(' + query + ')').fadeIn('slow', function () {
            $('.rm-data tr:contains(' + query + ')').slideDown().show();
        });
    } else {
            var combined_array = [];
            $.each(data, function (i, item) {
                combined_array.push(item.RM_Name);
                combined_array.push(item.RC_Name);

            });
            $.each(combined_array, function (i, item) {
                var contents = item;
                var array_check = item.indexOf(query) >= 0;
                var matches = '<a href="#" class="search-match ' + array_check + '">'+contents+'</a>';

                $('#search-helper-container').append(matches);
                $('.false').remove();
                $('#search-helper-container').css('display', 'block');

            });


        var error = '<div class="error-msg">Contact Not Found</div>';
        $('.rm-table-search').append(error);
        if ($('.error-msg').length == 0) {
            $('.rm-table').append(error);
        } else {
            $('.rm-table').append('');
        }

    }


}

$('#search-button').on('click', function () {
    search();

});

$('#search').on('focus', function () {
    $('#search').val('');
    $('.true').remove();
    $('#search-helper-container').css('display', 'none');
});

$('#search-helper-container').on('click', 'a.search-match', function (e) {
    e.preventDefault();
    var inputVal = $(this).text();
    $('#search').val(inputVal);
});

And a working Fiddle here. 还有一个正在工作的小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM