嵌套JSON数据自动回写HTML网页_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:43:51
原创
1759人浏览过

本文介绍解析来自mongodb数据库的json嵌套字符串,按html界面元素自定义属性展现数据内容的解决方案及技术实现代码。

HTML网页定义
<html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><head></head><body><h1>表单展示数据回写测试 JavaScript</h1><p id="demo" >这是表单数据解析示例.</p><div> <label >名称:</label><label fieldid="name"></label><br>通过自定义属性“fieldtype”来定义数据类型。<br><br><button id="test" type="button" onclick="showAllElem()">测试展示表单数据</button><br><br><label>标题:</label><label fieldid="title"></label><br><label >年龄:</label><label fildid="old"></label><br>多行子表单,字段属性定义为“subid”,表单按数据字段属性定义,标识出含有子表,属性为“subtable”单独定义列数,其他不变。<table id="dynamictable" fieldid="subdatas" subtable="3" border="1" cellspacing="0" width="400"><tr><td>数据名称</td><td>数据类型</td><td>数值</td></tr><tr><td><label subid="fieldid"></label></td><td><label subid="fieldtype"></label></td><td><label subid="fieldvalue"></label></td></tr></table><br><label >结束标志:</label><label fieldid="flag"></label><br></div> </body></html>
登录后复制

注,表单定义规则如下:
(1) 使用Label回显页面数据;
(2) 在label中,自定义属性“fieldid”,如果是表(table),则区别自定义属性为“subid”;
(3) 在表〈table〉的元素中,增加自定义属性subtable,其属性值为表格的列数。

在设计页面时,多行子表单的定义,必须按规则设计,要求如下:

  • 需要有表头行;
  • 事先定义出一行数据。
  • JavaScript代码
    <script>//表单增加插入一行function insertRow(){  var dytb_id = 'dynamictable';  var dy_row_num = document.getElementById(dytb_id).rows.length;  //取table中第二行单元格集合  var dy_row = document.getElementById(dytb_id).rows[1].cells;  //在table末尾,追加一行  var dytb=document.getElementById(dytb_id).insertRow(dy_row_num);  for (i = 0;i<dy_row.length; i++){    var dy_td = dytb.insertCell(i);    dy_td.innerHTML = dy_row[i].innerHTML;     } }//显示所有回写数据function showAllElem(){    var elems = document.getElementsByTagName("*");  //遍历所有元素    var ret_json = "";  //定义返回JSON数据字符串    var m = 0;          //JSON嵌套子文档起点    var subcolumns = 0;  //多行表单列数    var subrows = 0;     //多行表单数据行数    var row_num = 0;     //数据行数    ret_json = "{\"name\":\"测试JSON\",\"title\":\"测试标题\",\"subtable\":[{\"fieldid\":\"数据名称a\",\"fieldtype\":\"string\"},{\"fieldid\":\"数据名称b\",\"fieldtype\":\"number\"},{\"fieldid\":\"数据名称c\",\"fieldtype\":\"datetime\"}],\"flag\":\"测试结束!\"}";       //将 JavaScript 对象表示法 (JSON) 字符串转换为对象。    json_obj = JSON.parse(ret_json);    for(var i=0;i<elems.length;i++){        if (elems[i].hasAttribute("fieldid") && !(elems[i].hasAttribute("subtable"))){            //按键值获取对象的值            var tmp_key = elems[i].getAttribute("fieldid");            alert(tmp_key);            elems[i].innerText = json_obj[tmp_key];            //n++;        }else{            if (elems[i].hasAttribute("subtable")){                subcolumns = elems[i].getAttribute("subtable");                var tbl_id = elems[i].id;                //取表单数据行数                subrows = document.getElementById(tbl_id).rows.length - 1;                //按规则取多行子表单数据                var json_obj_dim = json_obj["subtable"];                for (var j=subrows;j<json_obj_dim.length;j++){                    insertRow();                }                m = 0;            }else{                if (elems[i].hasAttribute("subid") && (m < subcolumns)){                    var tmp_key = elems[i].getAttribute("subid");                    alert(tmp_key);                    elems[i].innerText = json_obj_dim[row_num][tmp_key];                    m++;                }else{                    if (elems[i].hasAttribute("subid")){                        //多行子表单数据换行                        row_num++;                        var tmp_key = elems[i].getAttribute("subid");                        alert(tmp_key);                        elems[i].innerText = json_obj_dim[row_num][tmp_key];                                                m = 1;                      }                }            }        }    } }</script>
    登录后复制

    其中JSON数据内容及格式如下所示:

    立即学习前端免费学习笔记(深入)”;

    Find JSON Path Online
    Find JSON Path Online

    Easily find JSON paths within JSON objects using our intuitive Json Path Finder

    Find JSON Path Online 30
    查看详情 Find JSON Path Online
    {"name":"测试JSON","title":"测试标题","subtable":[ {"fieldid":"数据名称a","fieldtype":"string"}, {"fieldid":"数据名称b","fieldtype":"number"}, {"fieldid":"数据名称c","fieldtype":"datetime"} ],"flag":"测试结束!"}"
    登录后复制

    按系统设计,此JSON数据是通过Webservice,从MongoDB数据库取出来的BSON数据。数据中“键-值”对的“键(key)”与HTML网页上lable的自定义属性“fieldid”或“subid”所对应。

    如下序列图为处理JSON数据展现的简明原理,其中,略去读取MongoDB数据库的过程及内容。

    Created with Raphaël 2.1.2 浏览器 浏览器 HTML页面 HTML页面 JS函数 JS函数 MongoDB MongoDB JSON对象 JSON对象 设计页面,自定义属性() 获取JSON数据() 读取BSON数据() 遍历HTML界面元素() parse(JSON字符串) 按界面元素键值获取JSON对象的值()

    注:关于JSON在以下文档模式中受到支持:Internet Explorer 8 标准模式、Internet Explorer 9 标准模式、Internet Explorer 10 标准模式、Internet Explorer 11 标准模式。此外,也在应用商店应用(Windows 8 和 Windows Phone 8.1)中受支持。
    在以下文档模式中不受支持:Quirks、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式。

    参考:
    网页表单文档设计及技术实现 肖永威 2015.5
    avaScript遍历HTML表单元素及表单定义 肖永威 2015.5
    W3School 提供内容:http://www.w3school.com.cn/jsref/dom_obj_document.asp
    微软所提供:JSON.parse 函数 (JavaScript)

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载
    来源:php中文网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号