【JavaScript】工作常用模板记录--持续更新

1. table 列表input批量转换为json格式数据(table行不合并)

  /**
 1. 假设table中每行中的每一个td中的input 为:
 2. <input data-did='name' class='form-control' name='list["+index+"].name' value='xxx'/>
 3. 注:list["+index+"],该前缀表示同一类型的数组,方便后端取值,按实际情况使用
  **/
  
 var labelList = [];//存放json数组
//标签 -- 按行循环每一行所有的input
$("#tableId").find("tr").each(function () {
	var labels ={};
	$(this).find("input").each(function () {
		var label = $(this);
		var name = label.attr("name");//json key
		if (name){
			//name.split(".")[1] 为 真实的 name,按实际情况使用
			labels[name.split(".")[1]] = label.val();//设置 key->value
		}
	});
	labelList.push(labels);
});
console.log("标签值列表",labelList);

2. table列表input批量转换为json格式数据(table行合并 )

/**
* 假设多个table,每个table的格式为
* <table>
*    <tr>
*      <td rowspan="3"><input name="chkOne" data-rowspan='3' data-seg-index="3"type="checkbox"></td>
*      <td rowspan="3"><input data-did='name' class='form-control' name='name' value='xxx'/></td>
*      <td rowspan="3"><input data-did='name1' class='form-control' name='name1' value='xxx'/></td>
*      <td><input data-did='name2' class='form-control' name='name2' value='xxx'/></td>
*      <td><input data-did='name3' class='form-control' name='name3' value='xxx'/></td>
*    <tr>
*     <tr>
*      <td><input data-did='name2' class='form-control' name='name2' value='xxx'/></td>
*      <td><input data-did='name3' class='form-control' name='name3' value='xxx'/></td>
*    <tr>
*  <tr>
*      <td><input data-did='name2' class='form-control' name='name2' value='xxx'/></td>
*      <td><input data-did='name3' class='form-control' name='name3' value='xxx'/></td>
*    <tr>
*
需要的数据格式为:
{
  "table": [
    { 
      "name": "name", "name1": "name1",
      "data":
          [
            {"name2": "114524","name3": "xxx"},
            {"name2": "114524","name3": "xxx"}
          ]
    },
    { 
      "name": "name", "name1": "name1",
      "data":
          [
            {"name2": "114524","name3": "xxx"},
            {"name2": "114524","name3": "xxx"}
          ]
    }   
  ],
  "table2": [
    {
      "name": "name", "name1": "name1",
      "data":
      [
        {"name2": "114524","name3": "xxx"},
        {"name2": "114524","name3": "xxx"}
      ]
    },
    {
      "name": "name", "name1": "name1",
      "data":
      [
        {"name2": "114524","name3": "xxx"},
        {"name2": "114524","name3": "xxx"}
      ]
    }
  ]
}
思路:扫描法
1.遍历每个table
2.遍历table中的每个合并行,找到rowspan的值,从该行开始往下遍历余下的被合并行
3.遍历每行数据
**/
var dataInfo = {};
//循环每个tabel
$(".table").each(function () {
  var tabelData = [];//存放table数据数组
  var tableType = $(this).attr("name");
  //查找每一个合并行前的选框(也可以指定其他的标志),筛选出所有的合并行
  $(this).find("[data-seg-index]").each(function () {
     var span = $(this).attr("data-rowspan");//合并行数
     var tr = $(this).parent().parent();//父亲的父亲,即 tr
     var json = {};//存放公共数据及每行独有数据
     var list = [];//用于存放下面的data数组
     var data = {};//存放每一行独有的数据
     var commonCol = ['name','name1'];//每一行的公共key
     var dataCol = ['name2','name3'];//最底层的 key
           
     //遍历合并行的数据 
     tr.find("input").each(function () {
        var $_this = $(this);
        var did = $_this.attr("name");
        if (commonCol.includes(did)){
           json[did] = $_this.val();//合并行公共数据
        }
        if (dataCol.includes(did)) {
           data[did] = $_this.val();//合并行独有数据
        }
     });
     list.push(data);//合并行数据入库
     
     var trs = tr.nextAll();//合并行所有的兄弟行(后面所有的行)
     var i =0;//记录遍历次数
     //遍历被合并的行
     trs.each(function () {
         i++;
         //如果遍历次数 小于 合并数量,则表明,该数组还没遍历完,继续遍历
         if (i < span){
             data = {};//清空数据
             $(this).find("input").each(function () {
                 var $_this = $(this);
                 var did = $_this.attr("name");
                 data[did] = $_this.val();// key --> value
             });
             list.push(data);//被合并行数据入库
         }
     });
     json.data = list;
     tabelData.push(json);
    });
    dataInfo[tableType] = typeData;
});
//打印数据
console.log(JSON.stringify(dataInfo)) ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值