在开发的过程中,不一定所有数据都是单条存储的,有的时候也会出现将多条数据进行

整合,以另外一种形式存储数据库。

这篇文章介绍的就是将一个表格形式的数据转化成json格式进行存储。

此处给出的实例图如下:

 

获取列表元素 python 获取列表元素存入json_数据

可以看见这个表格中包含了input输入框,select选择框以及button删除按钮。需要实现的功能为将input输入框和select选择框中的数据进行存储,而button按钮选择不存储。

本文给出的思路是通过选择器得到tbody,然后再查找其中的tr,再通过tr选择其中的td进行逐层转换并逐层回传进行信息的整合。

 

源码如下:

Html代码:

<div class="panel panel-primary">
    <div class="panel-heading">信息表

<button type="button" class="btn btn-default" οnclick="addItems()">添加项目      </button>

    </div>
    <div class="panel-body">
        <table class="table table-bordered table-hover" id="sampleTable">
            <thead>${tableMap}</thead>
            <tbody>
            </tbody>
        </table>
    </div>
    <input type="hidden" value="" name="sampleInfo" id="sampleInfo">
</div>

Javascript代码:

function submit2() {

        var tbody = $("#sampleTable").find("tbody");

changeTbodyToDetail(tbody);        $("#concreteForm").find("sampleInfo").val(changeTbodyToDetail(tbody));

        $("#concreteForm").submit();

        return false;

}

//结合本段js代码和html代码,可以看出这一方法是通过将表格信息进行格式转换后存储在属性为hidden的输入框中,在后台进行存储的。

 

//从一个tbody中获取数据并置入隐藏域
function changeTbodyToDetail(tbody) {
        var result = "";
        tbody.find("tr").each(function () {
            var b = changeTrToDetail($(this));
            result = result + b + ";";
        });
        result = result.substring(0, result.length - 1);
        $("input[name='sampleInfo']").val(result);
}

//从一个tr中获取数据
function changeTrToDetail(tr) {
        var result = "{";
        tr.find("td").each(function () {
            var a = changeTdToDetail($(this));
            if (a!=""){
                result = result + a + ",";
            }
        });
        result = result.substring(0, result.length - 1);
        result = result + "}";
        return result;
}

//从一个td中获取一个数据
function changeTdToDetail(id) {
        var input = id.find("input[type='text']");
        if (input.length > 0) {
            var name = input.prop("name");
            var val = input.val();
            var result = name + ":\"" + val + "\"";
            return result;
        }
        else{
            var select = id.find("select");
            var name = select.prop("name");
            var val = select.val();
            if(name==undefined){
                return "";
            }else{
                var result = name + ":\"" + val + "\"";
                return result;
            }
        }
}

可以看出整个转换的方法是选择了嵌套的方法,把整个功能变成了changeTbodyToDetail、changeTrToDetail、changeTdToDetail三个方法。每一层的处理方法都不难理解,但是在changeTdToDetail中有几个细节是需要注意的,也是在调试过程中进行修改才完善的方法。

在changeTdToDetail中需要实现的功能是选择存储input输入框和select选择框的数据,拒绝录入button删除按钮。为实现这一功能,需要增加一个判断语句进行筛选。在本段代码中if判断筛选出了input输入框和非input输入框,前者进行数据存储,后者仍需要进一步判断。需要注意的是,select选择框不同于input输入框,不能用.length进行判断。而在addItems()中我们定义button控件不同于使用的另外两个控件,设置button没有name属性,此处就可以通过name属性进行下一步判断,如果为undefined即为按钮,返回一个空string,不为undefined则进行数据传值。