javascript - 如何在单击输入时从对象中过滤数据?

标签 javascript jquery html json

我正在从一个名为 emp 的对象中检索数据。我正在遍历对象并连续打印每个条目。

我想让用户在勾选复选框时能够过滤他们的数据。例如。如果他们点击复选框,则只显示 33 岁以下的员工。

到目前为止我的代码:

   var emp = {
"employees":[
    {
        "firstName":"John",
        "details": {
            "role" : "manager",
            "age" : 55
        },
        "lastName":"Doe"
    }, 
    {
        "firstName":"Anna",
        "details": {
            "role" : "cashier",
            "age" : 35
        },
        "lastName":"Smith"
    }, 
    {
        "firstName":"Peter",
        "details": {
            "role" : "manager",
            "age" : 23
        },
        "lastName":"Jones"
    }, 
    {
        "firstName":"Jim",
        "details": {
            "role" : "cleaner",
            "age" : 20
        },
        "lastName":"Doveson"
    }, 
    {
        "firstName":"Nick",
        "details": {
            "role" : "waiter",
            "age" : 38
        },
        "lastName":"Doe"
    }
]
}

$(document).ready(function() {
var fixtureHTML = "";
 $.each(emp.employees, function(key, value) { 
            fixtureHTML += '<div class="media">'
            fixtureHTML += '<div class="meta-info">';
            fixtureHTML +=  '<span class="info">' + value.firstName + '</span>';
            fixtureHTML += '<span class="info">' + value.lastName + '</span>';
            fixtureHTML += '<span class="role">' + value.details.role + '</span>';
            fixtureHTML += '<span class="age">' + value.details.age+ '</span>';
            fixtureHTML += '</div></div>';

            if($("#check").is(':checked')) {
                if(value.details.age < 33) {
                   return false;
                }
            }
});
$('.js-load').append(fixtureHTML);
});

<div class="js-load"></div>
<input type="checkbox" name="check-filter" value="unit-in-group" id="check"/>
Check this box for filter by employees younger than 30

最佳答案

我不认为这是最好的方法,但这可以给你一个想法

var emp = {
"employees":[
    {
        "firstName":"John",
        "details": {
            "role" : "manager",
            "age" : 55
        },
        "lastName":"Doe"
    }, 
    {
        "firstName":"Anna",
        "details": {
            "role" : "cashier",
            "age" : 35
        },
        "lastName":"Smith"
    }, 
    {
        "firstName":"Peter",
        "details": {
            "role" : "manager",
            "age" : 23
        },
        "lastName":"Jones"
    }, 
    {
        "firstName":"Jim",
        "details": {
            "role" : "cleaner",
            "age" : 20
        },
        "lastName":"Doveson"
    }, 
    {
        "firstName":"Nick",
        "details": {
            "role" : "waiter",
            "age" : 38
        },
        "lastName":"Doe"
    }
]
}

$(document).ready(function() {
var fixtureHTML = "";
 $.each(emp.employees, function(key, value) { 
            fixtureHTML += '<div class="media">'
            fixtureHTML += '<div class="meta-info">';
            fixtureHTML +=  '<span class="info">' + value.firstName + '</span>';
            fixtureHTML += '<span class="info">' + value.lastName + '</span>';
            fixtureHTML += '<span class="role">' + value.details.role + '</span>';
            fixtureHTML += '<span class="age">' + value.details.age+ '</span>';
            fixtureHTML += '</div></div>';
});
$('.js-load').append(fixtureHTML);
});

$("#check").on("change",function(){
  var check = $(this);
  $('.js-load').html("");
  var fixtureHTML = "";
  $.each(emp.employees, function(key, value) { 
  if(check.is(':checked')) {
                if(value.details.age < 33) {
                  fixtureHTML += '<div class="media">'
            fixtureHTML += '<div class="meta-info">';
            fixtureHTML +=  '<span class="info">' + value.firstName + '</span>';
            fixtureHTML += '<span class="info">' + value.lastName + '</span>';
            fixtureHTML += '<span class="role">' + value.details.role + '</span>';
            fixtureHTML += '<span class="age">' + value.details.age+ '</span>';
            fixtureHTML += '</div></div>';
                }
            } else{
             
            fixtureHTML += '<div class="media">'
            fixtureHTML += '<div class="meta-info">';
            fixtureHTML +=  '<span class="info">' + value.firstName + '</span>';
            fixtureHTML += '<span class="info">' + value.lastName + '</span>';
            fixtureHTML += '<span class="role">' + value.details.role + '</span>';
            fixtureHTML += '<span class="age">' + value.details.age+ '</span>';
            fixtureHTML += '</div></div>';
              }
    });
  $('.js-load').append(fixtureHTML);
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="js-load"></div>
<input type="checkbox" name="check-filter" value="unit-in-group" id="check"/>
Check this box for filter by employees younger than 30

关于javascript - 如何在单击输入时从对象中过滤数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38183445/

相关文章:

javascript - 使用数组切换不同的图像

javascript - 将 .val() 转换为字符串 jQuery

javascript - 嵌入 SVG 时出现未定义错误

javascript - 我怎样才能正确关闭这个 jQuery 语句

javascript - 将选择器添加到动态生成的 <li> 元素中

html - 如何在设定的宽度内均匀分布导航 li 标签

javascript - MySql 时间戳和 JavaScript 时间

javascript - 导航菜单不会在点击时打开或关闭

javascript - 在 X 轴刻度上呈现 HTML

javascript - 如何在只读 div 中显示闪烁的文本光标/插入符号