从表格获取数据组JSON格式提交

最近做的一个任务,一个带input框的表格,里面可以填充数据,点保存的时候需要从表格里面提取每个input的value值。

dom结构如下

   <!-- 表格信息-->
                        <div id="table-info" class="tab-pane">

                            <div class="stackDiv" style="overflow: hidden; zoom: 1;">
                                <div class="guide">
                                    <p>1.填充数据格式,每行一条数据。如:(列值1|列值2|列值3|列值4|列值5|列值6),请严格按要求输入内容</p>
                                    <p>2.列值可以少于六列,但至少应包含一列,有列值则必须填写列头,否则请不要填写</p>
                                </div>
                                <div class="data-group">
                                    <div class="data-item" ms-for="el in dm">
                                        <div class="data-menu">
                                            <p class="name">标题</p>
                                            <input type="text" class="item-content" placeholder="表格标题" ms-attr="{value:el.Title}" name="item-title" />
                                        </div>
                                        <div class="data-menu">
                                            <p class="name">描述</p>
                                            <textarea class="item-content" placeholder="表格描述,在表格之前显示,非必填" ms-attr="{value:el.Description}" name="item-description"></textarea>
                                        </div>
                                        <div class="data-menu">
                                            <p class="name">表格</p>
                                            <table>
                                                <thead>
                                                    <tr><th ms-for="($key,$val) in el.TabHead"><input type="text" ms-attr="{value:$val,name:$key}" /></th><th>操作</th></tr>
                                                </thead>
                                                <tbody>
                                                    <tr ms-for="tbody in el.TabSet">
                                                        <td ms-for="($key,$val) in tbody"><input type="text" ms-attr="{value:$val,name:$key}" /></td>
                                                        <td><a class="handle add" title="插入一行">+</a><a class="handle remove" title="删除一行">-</a></td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                        <div class="data-menu">
                                            <p class="name">说明</p>
                                            <textarea class="item-content" placeholder="表格说明,在表格之后显示,非必填" ms-attr="{value:el.Remark}" name="item-remark" rows="4"></textarea>
                                        </div>
                                        <div class="shortcut no-see">
                                            <a class="btn btn-small btn-default shortcut-btn shortcut-show"><i class="icon-ok bigger-110"></i>快捷添加</a>
                                            <a class="btn btn-small btn-default shortcut-btn cover"><i class="icon-ok bigger-110"></i>覆盖填充</a>
                                            <a class="btn btn-small btn-default shortcut-btn append"><i class="icon-ok bigger-110"></i>追加填充</a>
                                            <a class="item-remove btn btn-small btn-danger shortcut-btn">删除表格</a> <br />
                                            <textarea rows="20" cols="50" id="textarea" placeholder="每行一条,列值以“|”隔开,如:列值1|列值2|列值3|列值4|列值5|列值6"></textarea>
                                        </div>
                                    </div>
                                </div>
                                <div class="btn-union">
                                    <a class="btn btn-small btn-success item-add" id="item-add"><i class="icon-ok bigger-110"></i>新增表格</a>
                                    <a class="btn btn-small btn-primary" onclick="tableSave()"><i class="icon-ok bigger-110"></i>保存表格</a>
                                </div>

                            </div>
                        </div>
                     </div>

可以添加多个表格项目,每个项目数据结构是一个大json,包括标题、描述、说明属性,表头thead组成一个name和对应的val值组成一个json,每一行组成一个小json,所有行的内容放进一个tbody的数组。再所有项目的大JSON放进一个数组提交到后台。

思路是这样的;每个列表项目为一个大的obj;遍历整个由基础表格项组成的元素;定义需要提交的属性;表格html结构如下;

<div class="data-group"><!--ms-for:el in dm.TabData--><!--ms-for-end:--><div class="data-item"><div class="hide-title">未命名标题</div><div class="data-menu"><p class="name">标题</p><input type="text" class="item-content" placeholder="表格标题" name="item-title" maxlength="100"></div><div class="data-menu"><p class="name">描述</p><textarea class="item-content" placeholder="表格描述,在表格前显示,可为空" name="item-description" maxlength="2000"></textarea></div><div class="data-menu"><p class="name">表格</p><table><thead><tr><th><input type="text" name="A"></th><th><input type="text" name="B"></th><th><input type="text" name="C"></th><th><input type="text" name="D"></th><th><input type="text" name="E"></th><th><input type="text" name="F"></th><th>操作</th></tr></thead><tbody><tr title="共1行"><td><input type="text" name="A"></td><td><input type="text" name="B"></td><td><input type="text" name="C"></td><td><input type="text" name="D"></td><td><input type="text" name="E"></td><td><input type="text" name="F"></td><td><a class="handle add" title="插入一行">+</a><a class="handle remove" title="删除一行">-</a></td></tr></tbody></table></div><div class="data-menu"><p class="name">说明</p><textarea class="item-content" placeholder="表格说明,在表格后显示,可为空" name="item-remark" rows="4"></textarea></div><div class="shortcut"><a class="btn btn-small btn-default shortcut-btn shortcut-show"><i class="icon-ok bigger-110"></i>快捷添加</a><a class="btn btn-small btn-default shortcut-btn cover" title="不保留表格原有数据"><i class="icon-ok bigger-110"></i>覆盖填充</a><a class="btn btn-small btn-default shortcut-btn append" title="保留表格原有数据"><i class="icon-ok bigger-110"></i>追加填充</a><a class="item-remove btn btn-small btn-danger shortcut-btn">删除表格</a><a class="item-hide btn btn-small btn-primary shortcut-btn">隐藏表格</a> <br><textarea rows="10" cols="50" id="textarea" placeholder="列值最多六项,每行一条,以“|”隔开,如:列值1|列值2|列值3|列值4|列值5|列值6"></textarea></div></div><div class="data-item"><div class="hide-title">未命名标题</div><div class="data-menu"><p class="name">标题</p><input type="text" class="item-content" placeholder="表格标题" name="item-title" maxlength="100"></div><div class="data-menu"><p class="name">描述</p><textarea class="item-content" placeholder="表格描述,在表格前显示,可为空" name="item-description" maxlength="2000"></textarea></div><div class="data-menu"><p class="name">表格</p><table><thead><tr><th><input type="text" name="A"></th><th><input type="text" name="B"></th><th><input type="text" name="C"></th><th><input type="text" name="D"></th><th><input type="text" name="E"></th><th><input type="text" name="F"></th><th>操作</th></tr></thead><tbody><tr><td><input type="text" name="A"></td><td><input type="text" name="B"></td><td><input type="text" name="C"></td><td><input type="text" name="D"></td><td><input type="text" name="E"></td><td><input type="text" name="F"></td><td><a class="handle add" title="插入一行">+</a><a class="handle remove" title="删除一行">-</a></td></tr><tr><td><input type="text" name="A" value=""></td><td><input type="text" name="B" value=""></td><td><input type="text" name="C" value=""></td><td><input type="text" name="D" value=""></td><td><input type="text" name="E" value=""></td><td><input type="text" name="F" value=""></td><td><a class="handle add" title="插入一行">+</a><a class="handle remove" title="删除一行">-</a></td></tr><tr><td><input type="text" name="A" value=""></td><td><input type="text" name="B" value=""></td><td><input type="text" name="C" value=""></td><td><input type="text" name="D" value=""></td><td><input type="text" name="E" value=""></td><td><input type="text" name="F" value=""></td><td><a class="handle add" title="插入一行">+</a><a class="handle remove" title="删除一行">-</a></td></tr><tr title="共4行"><td><input type="text" name="A" value=""></td><td><input type="text" name="B" value=""></td><td><input type="text" name="C" value=""></td><td><input type="text" name="D" value=""></td><td><input type="text" name="E" value=""></td><td><input type="text" name="F" value=""></td><td><a class="handle add" title="插入一行">+</a><a class="handle remove" title="删除一行">-</a></td></tr></tbody></table></div><div class="data-menu"><p class="name">说明</p><textarea class="item-content" placeholder="表格说明,在表格后显示,可为空" name="item-remark" rows="4"></textarea></div><div class="shortcut no-see"><a class="btn btn-small btn-default shortcut-btn shortcut-show"><i class="icon-ok bigger-110"></i>快捷添加</a><a class="btn btn-small btn-default shortcut-btn cover" title="不保留表格原有数据"><i class="icon-ok bigger-110"></i>覆盖填充</a><a class="btn btn-small btn-default shortcut-btn append" title="保留表格原有数据"><i class="icon-ok bigger-110"></i>追加填充</a><a class="item-remove btn btn-small btn-danger shortcut-btn">删除表格</a><a class="item-hide btn btn-small btn-primary shortcut-btn">隐藏表格</a> <br><textarea rows="10" cols="50" id="textarea" placeholder="列值最多六项,每行一条,以“|”隔开,如:列值1|列值2|列值3|列值4|列值5|列值6"></textarea></div></div></div>

首先用jquery选中相应的元素进行循环

 $(‘.data-group .data-item‘).each(function () {
        var tabModel = new Object();
        tabModel.Title = $(this).find(‘[name="item-title"]‘).val();
        tabModel.Description = $(this).find(‘[name="item-description"]‘).val();
        tabModel.Remark = $(this).find(‘[name="item-remark"]‘).val();

再获取每个单元下面的表头;是个单独的json;

 tabModel.TabHead = new Object();
        //获取表头信息
        for (var i = 0; i < $(this).find(‘th‘).length - 1; i++) {
            tabModel.TabHead[$(this).find(‘th input‘).eq(i).attr(‘name‘)] = $(this).find(‘th input‘).eq(i).val();
        }

最后获取表身的json数据;首先循环每行;接着循环每列;再转为需要的字符串格式;把做好的单元JSON push汇总;

//获取表内容
        tabModel.TabSet = [];
        //遍历每行
        for (var j = 0; j < $(this).find(‘tbody tr‘).length; j++) {
            tbodyModel = new Object();
            //遍历每列
            for (var k = 0; k < $(this).find(‘tbody tr‘).eq(j).find(‘td‘).length - 1; k++) {
                tbodyModel[$(this).find(‘tbody tr‘).eq(j).find(‘td‘).eq(k).find(‘input‘).attr(‘name‘)] = $(this).find(‘tbody tr‘).eq(j).find(‘td‘).eq(k).find(‘input‘).val();
            }
            tabModel.TabSet.push(tbodyModel);
        }
        tabData.push(JSON.stringify(tabModel));

总的代码是这样的

 var tabData = [];
    $(‘.data-group .data-item‘).each(function () {
        var tabModel = new Object();
        tabModel.Title = $(this).find(‘[name="item-title"]‘).val();
        tabModel.Description = $(this).find(‘[name="item-description"]‘).val();
        tabModel.Remark = $(this).find(‘[name="item-remark"]‘).val();
        tabModel.TabHead = new Object();
        //获取表头信息
        for (var i = 0; i < $(this).find(‘th‘).length - 1; i++) {
            tabModel.TabHead[$(this).find(‘th input‘).eq(i).attr(‘name‘)] = $(this).find(‘th input‘).eq(i).val();
        }
        //获取表内容
        tabModel.TabSet = [];
        //遍历每行
        for (var j = 0; j < $(this).find(‘tbody tr‘).length; j++) {
            tbodyModel = new Object();
            //遍历每列
            for (var k = 0; k < $(this).find(‘tbody tr‘).eq(j).find(‘td‘).length - 1; k++) {
                tbodyModel[$(this).find(‘tbody tr‘).eq(j).find(‘td‘).eq(k).find(‘input‘).attr(‘name‘)] = $(this).find(‘tbody tr‘).eq(j).find(‘td‘).eq(k).find(‘input‘).val();
            }
            tabModel.TabSet.push(tbodyModel);
        }
        tabData.push(JSON.stringify(tabModel));
    })

    tabData = "[" + tabData.join() + "]";
时间: 2024-10-27 12:22:40

从表格获取数据组JSON格式提交的相关文章

ajax的使用(使用json格式提交给服务端)

在aspx的时候,我们习惯使用ajax提交数据的时候,当请求异步发送给后台时候,我们习惯在后台使用request的方法,根据参数名称,获取对应的提交的值. 现在在mvc的时候,开发的时候,仔细研究了一下ajax的使用方式,先回顾下之前我最长用的方式,就是使用$.get(url,data,function(){},''json");这个我们都知道返回的时候数据是json的格式,我们一直没有考虑提交数据是否也有json的格式. 先看先$.ajax({url:"",type:&qu

了解php数据转json格式与前端交互基础

php数据转json格式与前端交互 ArryJson1.php <?php $test=array(); $word=array("我12","要43","把23","你65","们7","全87","都","吃","掉79","嗯78","啊09","蒙67",

C# 任意类型数据转JSON格式

每天都是不一样,积极的去感受生活 C# 任意类型数据转JSON格式 /// <summary> /// List转成json /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonName"></param> /// <param name="list"></para

关于多条数据转为json格式单次传输的问题 2017.05.27

数据形式如下: var mycars = [];//定义数组存放多条数据 for(var i=0;i<2;i++){ var jsonData = {};//定义变量存放单条数据 jsonData.MainCmdID = 1; jsonData.SubCmdID = i; mycars[i]=JSON.stringify(jsonData);//单挑数据转为json格式,存放到数组 } var toStr="";//定义字符变量准备拼接json for (var i=0;i<

JS实现动态生成表格并提交表格数据向后端 表格中数据转为json

原文地址 需求:在web页面上动态的生成表格,并可以对表格中的数据进行编辑,然后把表格中的数据提交至后端服务器保存. 首先动态生成表格. 1.首先我们需要导入JS库文件.jQuery 2.然后在页面div中事先创建一个空白表格,可以根据需求而定,我这里是一个带表头的表格 <table border="0" style="text-align: center;" width="100%" id="myTable">

利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据并且获取其中某列数据

演示效果参考如下:XML转JSON 另一个搭配SQL实现:http://sheetjs.com/sexql/index.html 详细介绍: 1.首先需要导入js <script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script> 2.导入文件框 这里importExcel(this)是方法,名字可以自己定义. <input type="file"onchang

struts2将数据通过Json格式显示于EasyUI-datagrid数据表格

1.搭建ssh开发环境 2.写好Dao.service等方法 3.建立DTO数据传输对象: package com.beichende.sshwork.user.web.dto; import java.util.ArrayList; import java.util.List; import com.beichende.sshwork.pojo.User; public class Pagination<T> { private int total; private List<User

在Sql Server 2016中使用For Json子句把数据作为json格式导出

原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/export-query-result-as-json-format-in-sql-server-2016/ 使用for json子句把查询结果作为json字符串导出,将作为sql server 2016中首先可用的一个特性.如果你熟悉for xml子句,那么将很容易理解for json: select ccolumn, expression, column as ali

nodejs 获取url中json格式的参数

在使用nodejs时经常使用req.query.参数名 来获取参数的值 例如 url : http://localhost:7778/project?id=1 <span style="font-size:18px;">var id = req.query.id console.log(id);//打印出url的id参数值1 </span> 但是在url中的参数是JSON格式时就出现了问题 url:http://localhost:7778/project?ma