zoukankan      html  css  js  c++  java
  • 淘宝后台添加颜色尺码动态sku

    废话不多说,直接上代码,用了vue,可直接copy运行

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://select2.github.io/vendor/js/jquery.min.js"></script>
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
        <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css">
        <style>
            label{
                padding-right:10px
            }
        </style>
    </head>
    <body>
    <div id="root">
         <div class="form-group">
             <span>color:</span>
             <label @change="labelChange(color,'color')" v-for="color in colors"><input type="checkbox">{{color}}</label>
         </div>
        <div class="form-group">
            <span>size:</span>
            <label @change="labelChange(size,'size')" v-for="size in sizes"><input type="checkbox">{{size}}</label>
        </div>
        <div class="form-group">
            <span>capacity:</span>
            <label @change="labelChange(capacity,'capacity')" v-for="capacity in capacitys"><input type="checkbox">{{capacity}}</label>
        </div>
        <div class="form-group">
            <span>jixings:</span>
            <label @change="labelChange(jixing,'jixing')" v-for="jixing in jixings"><input type="checkbox">{{jixing}}</label>
        </div>
        <div id="createTable"></div>
    </div>
    
    <script type="text/javascript">
        var app = new Vue({
            el: '#root',
            data: {
                 colors:['red','blue','black'],
                 sizes:['S','M','L'],
                 capacitys:['8G','16G','32G','64G'],
                 jixings:['thin','thick'],
                 columNum:0,
                 arrayColumn:[],
                 res:{},
                 result : []
            },
            methods:{
                labelChange(v,title){
                    if( !this.res[title] ){
                        this.res[title] = [v];
    
                    }else{
                        if( indexofArr(this.res[title],v) ==-1 ){
                            this.res[title].push(v);
                        }else{
                            var index =  indexofArr( this.res[title] , v )  ;
                            this.res[title].splice(index,1);
                        }
                    }
    
                    var arr1 = [];
                    for(var title in this.res){
                        if( this.res[title].length > 0 ){
                            arr1.push(this.res[title])
                        }
                    }
                    this.result = doExchange(arr1);
                    this.createTable();
    
                    for(var i=0;i<4;i++){
                        this.mergeCell( $('table'),i);
                    }
                },
                createTable(){
                    if( $('#createTable').children().length == 0 ){
                        $('<table id="process" border="1" cellpadding="1" cellspacing="0"><thead><tr></tr></thead><tbody></tbody></table>').appendTo($('#createTable'));
                    }
                    var str = '';
                    for(var title in this.res){
                        str+= '<th>'+title+'</th>';
                    }
                    $('#createTable thead tr').html(str);
    
                    var strBody = '';
    
                    for(var i=0;i<this.result.length ; i++){
                        var newArr = this.result[i].split(',');
                        console.log(newArr);
                        var str2='';
                        for(var j=0;j<newArr.length;j++){
                            str2 +='<td>'+newArr[j]+'</td>'
                        }
                        strBody +='<tr>'+str2+'</tr>';
                    }
                    $('#createTable tbody').html(strBody);
                },
                mergeCell($table,colIndex){
                    $table.data('col-content', ''); // 存放单元格内容
                    $table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1
                    $table.data('col-td', $()); // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
    
                    $table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
                    // 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
                    $('tbody tr', $table).each(function (index) {
                        // td:eq中的colIndex即列索引
                        var $td = $('td:eq(' + colIndex + ')', this);
    
                        // 取出单元格的当前内容
                        var currentContent = $td.html();
    
                        // 第一次时走此分支
                        if ($table.data('col-content') == '') {
                            $table.data('col-content', currentContent);
                            $table.data('col-td', $td);
                        } else {
                            // 上一行与当前行内容相同
                            if ($table.data('col-content') == currentContent) {
                                // 上一行与当前行内容相同则col-rowspan累加, 保存新值
                                var rowspan = $table.data('col-rowspan') + 1;
                                $table.data('col-rowspan', rowspan);
                                // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
                                $td.hide();
                                // 最后一行的情况比较特殊一点
                                // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
                                if (++index == $table.data('trNum'))
                                    $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
                            } else { // 上一行与当前行内容不同
                                // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
                                if ($table.data('col-rowspan') != 1) {
                                    $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
                                }
                                // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
                                $table.data('col-td', $td);
                                $table.data('col-content', $td.html());
                                $table.data('col-rowspan', 1);
                            }
                        }
                    });
                }
            }
        })
        /**检查 某个元素v 在数组中是否存在,存在返回1  不存在返回-1**/
        function indexofArr(arr,v){
            for(var i=0;i<arr.length;i++){
                if(arr[i]==v){
                    return i  //存在
                }
            }
            return -1  //不存在
        }
    
       function  doExchange (doubleArrays) {
            var len = doubleArrays.length;
            if (len >= 2) {
                var arr1 = doubleArrays[0];
                var arr2 = doubleArrays[1];
                var len1 = doubleArrays[0].length;
                var len2 = doubleArrays[1].length;
                var newlen = len1 * len2;
                var temp = new Array(newlen);
                var index = 0;
    
                for (var i = 0; i < len1; i++) {
                    for (var j = 0; j < len2; j++) {
                        temp[index] = arr1[i] + "," + arr2[j];
                        index++;
                    }
                }
                var newArray = new Array(len - 1);
                newArray[0] = temp;
    
                if (len > 2) {
                    var _count = 1;
                    for (var i = 2; i < len; i++) {
                        newArray[_count] = doubleArrays[i];
                        _count++;
                    }
                }
                return doExchange(newArray);
            }
            else {
                return doubleArrays[0];
            }
        }
    
    </script>
    </body>
    </html>
    

      

  • 相关阅读:
    修改MySQL的数据目录
    Ubuntu安装Sublime Text3插件Emmet的依赖PyV8
    ThoughtWorks的面试总结
    使用百度地图做地理追踪
    Make a plan
    ubuntu 下php + nginx
    编译Nginx
    CSS清除浮动
    关于项目提测质量的一点思考
    Jenkins配置
  • 原文地址:https://www.cnblogs.com/webskill/p/6589020.html
Copyright © 2011-2022 走看看