如何根据多筛选器选择在页面上对 JSON 数据进行分组和显示?

How do I group and display my JSON data on the page based on the multi-filter selection?

提问人:Khan 提问时间:10/31/2023 最后编辑:Khan 更新时间:10/31/2023 访问量:29

问:

我目前有 3 个选择框多重过滤器,它们从 JSON 文件中提取数据。我需要该页面根据筛选器的选择显示所有相关的 JSON 数据。例如,在选择国家/地区、省/自治区/直辖市

[HTML全文]

<div class="container" style="width:600px;">
    <select name="country" id="country" class="form-control input-lg">
        <option value="">Select country</option>
    </select>
    <br />
    <select name="state" id="state" class="form-control input-lg">
        <option value="">Select state</option>
    </select>
    <br />
    <select name="city" id="city" class="form-control input-lg">
        <option value="">Select city</option>
    </select>
</div>

JS系列

$(document).ready(function() {

load_json_data('country');

function load_json_data(id, parent_id) {
    var html_code = '';
    $.getJSON('./data/country_state_city.json', function(data) {

        html_code += '<option value="">Select ' + id + '</option>';
        $.each(data, function(key, value) {
            if (id == 'country') {
                if (value.parent_id == '0') {
                    html_code += '<option value="' + value.id + '">' + value.name + '</option>';
                }
            } else {
                if (value.parent_id == parent_id) {
                    html_code += '<option value="' + value.id + '">' + value.name + '</option>';
                }
            }
        });
        $('#' + id).html(html_code);
    });

}

$(document).on('change', '#country', function() {
    var country_id = $(this).val();
    if (country_id != '') {
        load_json_data('state', country_id);
    } else {
        $('#state').html('<option value="">Select state</option>');
        $('#city').html('<option value="">Select city</option>');
    }
});
$(document).on('change', '#state', function() {
    var state_id = $(this).val();
    if (state_id != '') {
        load_json_data('city', state_id);
    } else {
        $('#city').html('<option value="">Select city</option>');
    }
});

});

JSON格式

[
 {
  "id":"1",
  "name":"USA",
  "parent_id":"0"
 }, 
 {
  "id":"2",
  "name":"Canada",
  "parent_id":"0"
 }, 
 {
  "id":"3",
  "name":"Australia",
  "parent_id":"0"
 }, 
 {
  "id":"4",
  "name":"New York",
  "parent_id":"1"
 }, 
 {
  "id":"5",
  "name":"Alabama",
  "parent_id":"1"
 }, 
 {
  "id":"6",
  "name":"California",
  "parent_id":"1"
 }, 
 {
  "id":"7",
  "name":"Ontario",
  "parent_id":"2"
 }, 
 {
  "id":"8",
  "name":"British Columbia",
  "parent_id":"2"
 }, 
 {
  "id":"9",
  "name":"New South Wales",
  "parent_id":"3"
 }, 
 {
  "id":"10",
  "name":"Queensland",
  "parent_id":"3"
 }, 
 {
  "id":"11",
  "name":"New York city",
  "parent_id":"4"
 }, 
 {
  "id":"12",
  "name":"Buffalo",
  "parent_id":"4"
 }, 
 {
  "id":"13",
  "name":"Albany",
  "parent_id":"4"
 }, 
 {
  "id":"14",
  "name":"Birmingham",
  "parent_id":"5"
 }, 
 {
  "id":"15",
  "name":"Montgomery",
  "parent_id":"5"
 }, 
 {
  "id":"16",
  "name":"Huntsville",
  "parent_id":"5"
 }, 
 {
  "id":"17",
  "name":"Los Angeles",
  "parent_id":"6"
 }, 
 {
  "id":"18",
  "name":"San Francisco",
  "parent_id":"6"
 }, 
 {
  "id":"19",
  "name":"San Diego",
  "parent_id":"6"
 }, 
 {
  "id":"20",
  "name":"Toronto",
  "parent_id":"7"
 }, 
 {
  "id":"21",
  "name":"Ottawa",
  "parent_id":"7"
 }, 
 {
  "id":"22",
  "name":"Vancouver",
  "parent_id":"8"
 }, 
 {
  "id":"23",
  "name":"Victoria",
  "parent_id":"8"
 }, 
 {
  "id":"24",
  "name":"Sydney",
  "parent_id":"9"
 }, 
 {
  "id":"25",
  "name":"Newcastle",
  "parent_id":"9"
 }, 
 {
  "id":"26",
  "name":"City of Brisbane",
  "parent_id":"10"
 }, 
 {
  "id":"27",
  "name":"Gold Coast",
  "parent_id":"10"
 }
]
javascript html jquery json

评论

0赞 Daniel Black 10/31/2023
我不清楚你在这里问什么。显示的标记/逻辑是否有错误?是否存在有关如何显示信息的格式问题?请更新您的问题,以明确您在问什么。

答:

0赞 auza0002 10/31/2023 #1

您在短时间内进行多项更改。JavaScript 是一个强大的工具,但您可以通过使用库来增强您的功能并简化您未来的项目来节省时间。我建议考虑 React 或 Angular。对于 React,您可以探索 Vite。Vite React 链接

另一方面,您应该考虑更改对象的某些属性。例如

{
 "id":"1",
 "name":"USA",
 "city" : "X City"
 "state" : "X State"
 "time-zone" "X time-z"
 },

// opt 2 

{
"id" : 1,
 "country" : "USA:,
    "cities" : {
              ... cities, 
                   {
                   "id":"1",
                   "name":"X name",
                   "time-zone" "X time-z"
                   },
                }
    }

添加这些值后,您可以根据需要按多个顺序进行筛选,首先按州筛选,然后按城市筛选,最后按时区筛选,然后获得符合所有要求的所有对象。如何在JS上使用过滤器