通过数据变化引起显示相应改变

数据驱动显示:

  • HTML部分

  •  1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    <div id="div1">
        <label>用户名:</label> <input type="text" name="user" /><br />
        <label>&emsp;龄:</label> <input type="text" name="age" /><br />
        <label>&emsp;别:</label>
        <input type="radio" name="sex" value="男" checked /><label></label>
        <input type="radio" name="sex" value="女" /><label></label><br />
        <label>&emsp;话:</label> <input type="tel" name="tel" /><br />
        <button>提交</button>
    </div>
    <table>
        <tr>
            <th><input type="checkbox" id="all" />全选</th>
            <th>用户名</th>
            <th>年龄</th>
            <th>性别</th>
            <th>电话</th>
            <th>删除</th>
        </tr>
    </table>
    
  • CSS部分

  •  1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    table {
        border-collapse: collapse;
        width: 1000px;
    }
    td,th {
        height: 30px;
        text-align: center;
        line-height: 30px;
        border: 1px solid #000000;
    }
    
  • JavaScript部分

  •  1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    
    //TODO数据驱动显示
    var div1,table,inputs,btn,head,all;
    var list=[];
    init();
    function init(){
        div1=document.querySelector("#div")
        inputs=Array.from(document.querySelector("#div1").querySelectorAll("input"));
        table=document.querySelector("table");
        head=table.firstElementChild;
        btn=document.querySelector("button");
        btn.addEventListener("click",addData);
        all=document.querySelector("#all");
        all.addEventListener("click",allData);
    }
    
    function allData(e){
        console.log(this);
        if(this===all){
            list.forEach(function(item){
                item.checked=all.checked;
                // console.log(this);
                // item.checked=this.checked;
            })
            renderTable();
        }else{
            this.data.checked=this.checked;
            all.checked=list.every(function(item){
                return item.checked;
            })
        }
    }
    
    function addData(){
        var obj=inputs.reduce(function(value,item){
            if(item.name==="sex" && item.checked) value[item.name]=item.value
            // else value[item.name]=item.value;
            else if (item.name !== "sex") value[item.name] = item.value;
            if(item.name!=="sex") item.value="";
            return value;
        },{checked:false})
        obj["del"]=false;
        list.push(obj);
        renderTable();
    }
    
    function renderTable(){
        table.innerHTML="";
        table.appendChild(head);
        for(var i=0;i<list.length;i++){
            createTr(list[i]);
        }
        all.checked=list.every(function(item){
            return item.checked;
        })
    }
    
    function createTr(data){
        var tr=document.createElement("tr");
        for(var prop in data){
            var td=document.createElement("td");
            switch(prop){
                case "checked":
                    var ck=document.createElement("input");
                    ck.type="checkbox";
                    td.appendChild(ck);
                    ck.data=data;
                    ck.checked=data.checked;
                    ck.addEventListener("click",allData)
                    break;
                case "del":
                    var del=document.createElement("button");
                    del.textContent="删除";
                    td.appendChild(del);
                    del.data=data;
                    del.addEventListener("click",delData);
                    break
                default:
                    td.textContent=data[prop];
            }
            tr.appendChild(td);
        }
        table.appendChild(tr);
    }
    
    function delData(e){
        var data=this.data;
        list=list.filter(function(item){
            return item!==data;
        })
        renderTable()
    }