javascript - 使用 Jquery 使用 JSON 创建角色和权限表矩阵

标签 javascript jquery html json

我想要使用 Jquery 使用 JSON 创建 Angular 色和权限的表矩阵。该表应具有复选框,并且如果该值存在于 JSON 中,则应检查 Angular 色和权限映射单元格。

这是我的 JSON 格式:

var obj = [
  { 
    "WidgetID": 1,
    "WidgetName": "Widget 1  ",
    "ProjectRoleGroup": "Role Group 1"
  },
  { 
    "WidgetID": 1,
    "WidgetName": "Widget 1  ",
    "ProjectRoleGroup": "Role Group 2"
  },
  { 
    "WidgetID": 2,
    "WidgetName": "Widget 2",
    "ProjectRoleGroup": "Role Group 3"
  },
  { 
    "WidgetID": 3,
    "WidgetName": "Widget 3",
    "ProjectRoleGroup": "Role Group 2"
  },
  { 
    "WidgetID": 4,
    "WidgetName": "Widget 4",
    "ProjectRoleGroup": "Role Group 3"
  }
]

这是我想要使用 Jquery 的表:

enter image description here

请帮忙。提前致谢。

最佳答案

使用下面的代码片段。有3个步骤:

  1. 获取所有 Angular 色(稍后在表标题上使用)
  2. 合并数据源(buildTableDataSource 函数)以构建数据行
  3. 构建表格

    <table id="tblRoles"></table>
    
    <script>
    var obj = [
      {
          "WidgetID": 1,
          "WidgetName": "Widget 1  ",
          "ProjectRoleGroup": "Role Group 1"
      },
      {
          "WidgetID": 1,
          "WidgetName": "Widget 1  ",
          "ProjectRoleGroup": "Role Group 2"
      },
      {
          "WidgetID": 2,
          "WidgetName": "Widget 2",
          "ProjectRoleGroup": "Role Group 3"
      },
      {
          "WidgetID": 3,
          "WidgetName": "Widget 3",
          "ProjectRoleGroup": "Role Group 2"
      },
      {
          "WidgetID": 4,
          "WidgetName": "Widget 4",
          "ProjectRoleGroup": "Role Group 3"
      }
    ]
    var getAllRoles = function () {
        var roleGroups = [];
        $.each(obj, function (i, v) {
            if (roleGroups.indexOf(v.ProjectRoleGroup) == -1) {
                roleGroups.push(v.ProjectRoleGroup);
            }
        });
        return roleGroups;
    }
    
    var buildTableDataSource = function () {
        var ret = [];
        $.each(obj, function (i, v) {
            var existed = $.grep(ret, function (e, i) {
                return e.WidgetID == v.WidgetID;
            });
            if (existed.length) {
                existed[0].Roles.push(v.ProjectRoleGroup);
            } else {
                ret.push({
                    WidgetID: v.WidgetID,
                    WidgetName: v.WidgetName,
                    Roles: [v.ProjectRoleGroup]
                });
            }
        });
        return ret;
    }
    var buildTable = function () {
        var allRoles = getAllRoles();
        var tableDataSource = buildTableDataSource();
        var headerRow = $("<tr><td>Permission</td></tr>");
        $.each(allRoles, function (i, v) {
            headerRow.append('<td>' + v + '</td>');
        });
        $('#tblRoles').append(headerRow);
        $.each(tableDataSource, function (i, v) {
            var row = $('<tr><td>' + v.WidgetName + '</td></tr>');
            $.each(allRoles, function (j, r) {
                if (v.Roles.indexOf(r) > -1) {
                    row.append('<td><input type="checkbox" checked="checked" /></td>');
                } else {
                    row.append('<td><input type="checkbox" /></td>');
                }
                $('#tblRoles').append(row);
            });
        });
    }
    
    $(document).ready(function () {
        buildTable();
    })
    

关于javascript - 使用 Jquery 使用 JSON 创建角色和权限表矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33801932/

相关文章:

javascript - 相同形式干扰

javascript - 有没有办法检测浏览器窗口当前是否处于事件状态?

javascript - 将 Node.js 服务器 JavaScript 处理移至客户端

jquery - Yii - jQuery 在 renderPartial 之后不工作

javascript - 如何使用 jquery 或 javascript 删除索引处的行?

javascript - 当用户输入无效的表单输入时如何避免页面刷新

javascript - Jquery UI slider 旋钮消失

java - 在 html 页面中实现按钮操作所需的帮助

html - 如何删除网页上的空白区域?

javascript - 输入类型编号应从带向上箭头的最小值和带向下箭头的最大值重新开始