美文网首页
商城动态生成table,修改基中一个值 ,其他数据不变

商城动态生成table,修改基中一个值 ,其他数据不变

作者: 如风_周 | 来源:发表于2018-01-31 09:42 被阅读7次

动态生成table,修改基中一个值 ,其他数据不变

公司要求根据商品生成动态表单,修改其中一个参数,其他数据不变,想了一天才解决这个问题,所以把方法写出来供大家查看,提供一个思路。

解决思路:保存表格已填充的数据,随着删除或者增加数据后根据获取类目数据,对比表格数据进行填充,重新渲染dom.

效果图 生成动态table.png
createTables();
function createTables(specLists,skuLists){
            var specList = [{"key":"颜色","value":[{"name":"黑色"},{"name":"红色"}]},{"key":"尺寸","value":[{"name":"1米"},{"name":"1.5米"}]}];
            var skuList = [{"tr":[{"td":"颜色"},{"td":"尺寸"},{"td":"库存"},{"td":"商家编码"}]},{"tr":[{"td":"黑色"},{"td":"1米"},{"td":"10"},{"td":"001"}]},{"tr":[{"td":"黑色"},{"td":"1.5米"},{"td":"15"},{"td":"150"}]},{"tr":[{"td":"白色"},{"td":"1米"},{"td":"10"},{"td":"10"}]},{"tr":[{"td":"白色"},{"td":"1.5米"},{"td":"15"},{"td":"15"}]}];
            var list = [];
            var thead = {
                    tr:[]
                };
            var tbody = [];
            for(var i = 0;i<specList.length;i++){
                thead.tr.push({"td":specList[i].key});
                if(tbody.length == 0){
                    for(var j = 0;j<specList[i].value.length;j++){
                        var tr = {
                        "tr":[{"td":specList[i].value[j].name}]
                        };
                        tbody.push(tr);
                    }
                }else{
                    var array = [];
                    var objArray = {};
                    for(var h = 0;h<tbody.length;h++){
                        for(var j = 0;j<specList[i].value.length;j++){
                            objArray.tr = tbody[h].tr.concat();
                            objArray.tr.push({"td":specList[i].value[j].name});
                            array.push({"tr":objArray.tr});
                        }
                    }
                    tbody = array;
                }
            }
            for(var a = 0;a < tbody.length;a++){
            if(skuList.length == 1 &&skuList[0].tr.length == 0){
            }else{
                // 只有一个规格时处理数据
                    if(tbody[a].tr.length == 1){
                        for(var c =0;c<skuList.length;c++){
                            if(tbody[a].tr[0].td == skuList[c].tr[0].td){
                                if(tbody[a].tr.length == 1){
                                    tbody[a].tr[1] = skuList[c].tr[skuList[c].tr.length-2];
                                    tbody[a].tr[2] = skuList[c].tr[skuList[c].tr.length-1];
                                }else if(tbody[a].tr.length == 2){
                                    tbody[a].tr[2] = skuList[c].tr[skuList[c].tr.length-2];
                                    tbody[a].tr[3] = skuList[c].tr[skuList[c].tr.length-1];
                                }
                            }
                        }
                    }else{
                        // 二个规格时处理数据
                        for(var b=0;b<tbody[a].tr.length;b++){
                            for(var e =0;e<skuList.length;e++){
                                if(tbody[a].tr[0].td == skuList[e].tr[0].td && tbody[a].tr[1].td == skuList[e].tr[1].td){
                                    if(tbody[a].tr.length == 1){
                                        tbody[a].tr[1] = skuList[e].tr[skuList[e].tr.length-2];
                                        tbody[a].tr[2] = skuList[e].tr[skuList[e].tr.length-1];
                                    }else if(tbody[a].tr.length == 2){
                                        tbody[a].tr[2] = skuList[e].tr[skuList[e].tr.length-2];
                                        tbody[a].tr[3] = skuList[e].tr[skuList[e].tr.length-1];
                                    }
                                }
                            }
                        }
                    }
                }
            }
            // 没有匹配到的数组初始化值
            for(var m = 0; m<tbody.length;m++){
                if(tbody[m].tr.length == 1){
                    tbody[m].tr[1] = {"td":""};
                    tbody[m].tr[2] = {"td":""};
                }else if(tbody[m].tr.length == 2){
                    tbody[m].tr[2] = {"td":""};
                    tbody[m].tr[3] = {"td":""};
                }
            }
            thead.tr.push({"td":"库存"},{"td":"商家编码"});
            list.push(thead);
            list = list.concat(tbody);
            var theadDom = "";
            var tbodyDom = "";
            // 填充table headerDom部分
            for(var x = 0; x<list[0].tr.length;x++){
                theadDom += '<th>'+list[0].tr[x].td+'</th>';
            }
            // 填充table tbodyDom部分
            for(var y = 1; y<list.length;y++){
                tbodyDom += '<tr>';
                var tddom = "";
                if(list[y].tr.length == 3){
                    tbodyDom += '<td>'+list[y].tr[0].td+'</td>';
                }else{
                    tbodyDom += '<td>'+list[y].tr[0].td+'</td>'+'<td>'+list[y].tr[1].td+'</td>';
                }
                tbodyDom += '<td><input type="text" class="layui-input" name="'+Math.random()+'"  required maxlength="4" value="'+list[y].tr[list[y].tr.length-2].td+'"></td><td><input type="text" class="layui-input" name="'+Math.random()+'" maxlength="15" value="'+list[y].tr[list[y].tr.length-1].td+'"></td>';
                tbodyDom = tbodyDom+'</tr>';
            }
            var dom = '<table class="layui-table"><thead><tr>'+theadDom+'</tr></thead><tbody>'+tbodyDom+'</tbody></table>';
            $('.table').empty().append(dom);

相关文章

网友评论

      本文标题:商城动态生成table,修改基中一个值 ,其他数据不变

      本文链接:https://www.haomeiwen.com/subject/pickzxtx.html