1、效果:

2、demo 源码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript test</title>
<style media="screen">
.write{
opacity: 0;
}
.visible {
opacity: 1;
}
button{
transition: opacity 1s ease;
}
</style>
</head>
<body>
<h3>控制前展示的项目依次:</h3> save、stop、cancel -- delete、submit、view -- update、export
<h3>控制之后展示项目:</h3>
<button type="button" class="cpe kpi write">save</button>
<button type="button" class="cpe kpi write">stop</button>
<button type="button" class="cpe kpi write">cancel</button> --
<button type="button" class="enb monitor write">delete</button>
<button type="button" class="enb monitor write">submit</button>
<button type="button" class="enb monitor write">view</button> --
<button type="button" class="operator query write">update</button>
<button type="button" class="operator query write">export</button> <h3>控制设置 - options:<font size="1">修改后点击窗口即生效</font></h3>
<textarea id="jsontxt" rows="18" cols="40">
{
cpe:{
kpi:{
write: true
}
},
enb:{
monitor:{
write: false
}
},
operator:{
query:{
write: true
}
}
}
</textarea>
</body>
<script type="text/javascript">
document.addEventListener('click',function(){
var jsonstr = document.querySelector('#jsontxt').value.trim(),
json = eval('('+jsonstr+')');
accessControl(json);
});
document.dispatchEvent(new Event('click'));
/**
* json数据映射到html
* @param obj: json数据
* @param path: 根路径,name属性的映射前缀(属性计算用到,使用者不用管)
**/
function accessControl(obj,path){
var props = {};
for (var key in obj) {
var propPath = path;
if (path) propPath = path + '.' + key;
else propPath = '.'+key;
/* 迭代子关系 */
if(typeof obj[key] === 'object') arguments.callee(obj[key], propPath);
else props[propPath] = obj[key];
}
/* 数据映射到 html */
for (var key in props) {
var doms = Array.from(document.querySelectorAll(key));
if(doms.length==0) continue;
doms.map(function(dom){setPermission(dom,props[key]);})
}
function setPermission(domObj,visibale){/* 可见设置 */
var isHave = Array.from(domObj.classList).includes('visible');
  if(visibale) {
if(!isHave) domObj.classList.add('visible');
}else {
if(isHave) domObj.classList.remove('visible');
}
}
}
</script>
</html>

JSON数据映射之元素可见控制的更多相关文章

  1. json数据映射填充到html元素显示

    映射算法做了改进,支持name重复映射 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  2. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  3. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  4. Golang: 解析JSON数据之二

    上次我们介绍了 Go 语言中序列化和反序列化 JSON 数据的两个方法 Marshal() 和 Unmarshal(),并以示例演示了它们的用法. 我们在例子中看到,需要事先声明好对应的结构体,才能跟 ...

  5. Golang: 解析JSON数据之一

    JSON 作为目前最流行的数据传输格式, 相信每个程序员都跟它打过交道吧.使用 Go 语言时,也不可避免的要操作 JSON 数据,令人惊喜的是,Go 内置了序列化和反序列化 JSON 的功能,今天就来 ...

  6. springmvc-高级参数绑定-映射-异常-json数据交互-拦截器

    1.1. 高级参数绑定 1.1.1. 复制工程 把昨天的springmvc-web工程复制一份,作为今天开发的工程 复制工程,如下图: 粘贴并修改工程名为web2,如下图: 工程右键点击,如下图: 修 ...

  7. json数据渲染表单元素出现的问题

    解析页面表单元素 parseForm: function () { var data = {}; $(this).find('input').each(function () { switch ($( ...

  8. 控制层解析post请求中json数据的时候,有些属性值为空

    原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...

  9. 原生js,jquery通过ajax获得后台json数据动态新增页面元素

    一.原生js通过ajax获取json数据 因为IE浏览器对ajax对象的创建和其他浏览器不同,为了兼容全部浏览器,我用下面的代码: function createXMLHttpRequest(){ t ...

随机推荐

  1. OWAPSP_ZAP使用

    启动OWAPSP_ZAP后 netstat -pantu | grep 8080

  2. IMPDP NETWORK_LINK参数

    在<[IMPDP]同一数据库实例不同用户间数据迁移复制—— NETWORK_LINK参数>(http://space.itpub.net/519536/viewspace-631571)文 ...

  3. 修改nginx日志格式为json

    Nginx 日志默认为普通文本的格式 /Oct/::: +] "https://boss.zbt.com/finance/partner/create-account-gateway?id= ...

  4. 反转链表(python)

    题目描述 输入一个链表,反转链表后,输出新链表的表头. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self ...

  5. 并查集和树的一些性质 hdu1325

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1325 题意是每次输入一对数字n,m表示一条树边,并且n是m的父亲,直到n==0&&m= ...

  6. linux 重定向命令详解(如1>/dev/null 2>&1)

    基础 0:表示标准输入stdin 1:表示标准输出stdout,系统默认为1,可省略(即1>/dev/null等价于>/dev/null) 2:表示标准错误stderr >:表示重定 ...

  7. Postman 测试swagger类接口技巧

    测试情景: 公司的项目接口越来越多,由于开发周期短,时间紧,缺乏接口文档,直接使用swagger记录所有接口信息.那么: 1. 我们如何更快的测试动辄300+数量的接口,如何分组管理和维护这些接口? ...

  8. aruba 802.11ac协议

    上述功能为802.11ac协议,高密环境下建议不勾选. 附百度百科:虽然802.11ac标准草案提高了传输速度并增加了带宽,可以支持企业网络中数量越来越庞大的设备,但是企业开始发现,这个标准需要依赖于 ...

  9. SAP中的slashX

    SlashX /n This terminates the transaction. 关闭当前事务. /nxxxx This terminates the current transaction, a ...

  10. 测试SD卡读写速度

    执行测试命令之前,一定先清除缓存:# echo 3> /proc/sys/vm/drop_caches SD卡读取的速度# echo 3> /proc/sys/vm/drop_caches ...