动态表格(全选/反选/背景等)

HTML

<body>
<form action="javascript:void(0);">
    <input type="text" id="id" placeholder="请输入编号">
    <input type="text" id="name" placeholder="请输入姓名">
    <input type="text" id="gender" placeholder="请输入性别">
    <input type="button" id="add" value="添加">
</form>
<!--表格的标准写法-->
<table>
    <caption>学生信息表</caption>
    <thead>
        <tr>
            <!--<td><input type="checkbox" name="cb" id="ck_all" onchange="ckAll()"></td>-->
            <th><input type="checkbox" name="cb" id="ck_all" class="cb"></th>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
    </thead>
    
    <tbody>
        <tr onmouseenter="changeBg()" onmouseleave="changeBg()">
            <td><input type="checkbox" name="cb" class="cb" onclick="ckAllCheck(this)" ></td>
            <td>1</td>
            <td>令狐冲</td>
            <td>性别</td>
            <td><a href="javascript:void(0);" onclick="deleteRow(this)">删除</a></td>
        </tr>
    </tbody>
</table>

<div id="div1">
    <input type="button" id="select_all" value="全选">
    <input type="button" id="select_none" value="全不选">
    <input type="button" id="select_rev" value="反选">
</div>
</body>
View Code

CSS样式

<style>
        form{
            text-align: center;
        }
        table{
            width: 500px;
            border: 2px solid red;
            margin: 0 auto;
        }    
        td,th{
            border: 1px solid red;
            text-align: center;
        }
        #div1{
            /*margin-left: 30%;*/
            margin-top: 10px;
            margin-left: 25%;
            /*margin-right: auto;*/
            position: relative;
        }      
        .enter{
            background-color: #2aabd2;
        }        
        .leave{
            background-color: white;
        }        
</style>
View Code

 JS

<script>
        var arr_cks = new Array();      //全局数组用来存储第几个checkbox被选中了--即checkbox的索引值
        
        window.onload = function () {
            document.getElementById("add").onclick = function () {
                var id = document.getElementById("id").value;
                var name = document.getElementById("name").value;
                var gender = document.getElementById("gender").value;
                var tbody = document.getElementsByTagName("tbody")[0];
                console.log(tbody.innerHTML);  
                tbody.innerHTML +="<tr onmouseenter=\"changeBg()\" onmouseleave=\"changeBg()\">\n" +
                    "        <td><input type=\"checkbox\" name=\"cb\" class=\"cb\" onclick=\"ckAllCheck(this)\" ></td>\n" +
                    "        <td>"+id+"</td>\n" +  //这里不需要转义""
                    "        <td>"+name+"</td>\n" +
                    "        <td>"+gender+"</td>\n" +
                    "        <td><a href=\"javascript:void(0);\" onclick=\"deleteRow(this)\">删除</a></td>\n" +   //如果是内部完整字符串需要进行转义
                    "    </tr>";
                var cbs = document.getElementsByClassName("cb");
                alert(arr_cks+"----");
                cbs[0].checked = false;
                for(var i=0;i<cbs.length;i++){
                    for(var j=0;j<arr_cks.length;j++){
                        if(i==arr_cks[j]){
                            cbs[i].checked = true;
                        }
                    }
                }
            }
            
            //全选复选框==>该"ck_all"复选框是不变的
            document.getElementById("ck_all").onchange = function () {
                // alert(document.getElementById("ck_all").checked);
                var cbs = document.getElementsByName("cb");
                for(var i=0;i<cbs.length;i++){
                    cbs[i].checked=this.checked;
                }
            }
            
            //全选按钮
            document.getElementById("select_all").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for(var i=0;i<cbs.length;i++){
                    cbs[i].checked=true;
                }
            }
            //全不选
            document.getElementById("select_none").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for(var i=0;i<cbs.length;i++){
                    cbs[i].checked = false;
                }
            }
            //反选
            document.getElementById("select_rev").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for(var i=0;i<cbs.length;i++){
                    cbs[i].checked = !cbs[i].checked;
                    if(i==0)
                        cbs[i].checked = false;
                }
                alert(arr_cks+"-------1");
                //重置arr_cks数组
                var flag = false;
                for(var i=1;i<cbs.length;i++){  //i是checkbox的索引
                    for(var j=0;j<arr_cks.length;j++){
                        if(i==arr_cks[j]){
                            var index = arr_cks.indexOf(i);  //获取在arr_cks中的索引
                            arr_cks.splice(index,1);    //删除掉
                            flag = true;  //存在相同的索引
                        }
                    }
                    if(flag==false){
                        ensurearr_cksNoRepeate(i);  //数组里面没有就添加
                    }
                    flag = false;
                }
                alert(arr_cks);
            }
        }
        
        //鼠标进入和离开触发改变背景函数
        function changeBg() {
            var trs = document.getElementsByTagName("tbody")[0].getElementsByTagName("tr");  //这么写是为了让表头不显示背景
            // var trs = document.getElementsByTagName("tr");
            for(var i=0;i<trs.length;i++){
                trs[i].onmouseenter = function () {
                    // trs[i].style.className = "enter"; //错误写法。不需要ing过style对象再获取className
                    this.className = "enter";
                }
                trs[i].onmouseleave = function () {
                    this.className = "leave";
                }
            }
        }
        
        function ckAll() {
            document.getElementById("ck_all").onchange = function () {
                alert(document.getElementById("ck_all").checked);
                var cbs = document.getElementsByName("cb");
                for(var i=0;i<cbs.length;i++){
                    cbs[i].checked=this.checked;
                }
            }
        }

        //检查所有复选框==》得出是否是全选状态
        function ckAllCheck(obj) {
            var cbs = document.getElementsByClassName("cb");
            // alert(cbs.length);
            var flag = obj.checked; //获取点下的复选框的状态
            var index = 0;
            if(flag == false){  //冲数组中除去当前的索引值
                for (var i = 0; i < cbs.length; i++) {
                    if(obj==cbs[i]){
                        index = i;
                    }
                }
            }
            alert(index);
            arr_cks.splice(index,1);
            for(var i=1;i<cbs.length;i++){  //跳过第一个
                if(cbs[i].checked==true){
                    ensurearr_cksNoRepeate(i);    //不是add或者appernd方法  ===》要在continue之前进行添加
                    count++;
                }
            }
            
            if(count==cbs.length-1){
                cbs[0].checked = true;
            }else {
                cbs[0].checked = false;
            }

        }

        //检查所有复选框是否是全选状态==>每次复选框改变的时候触发
        function ckAllCheck02() {   //=====》这个方法OK
            var cbs = document.getElementsByClassName("cb");
            // alert(cbs.length);
            var count = 0;
            arr_cks = new Array();      //空的数组重新存
            for(var i=1;i<cbs.length;i++){  //跳过第一个
                if(cbs[i].checked==true){
                    ensurearr_cksNoRepeate(i);    //不是add或者appernd方法  ===》要在continue之前进行添加
                    count++;
                }
            }
            if(count==cbs.length-1){
                cbs[0].checked = true;
            }else {
                cbs[0].checked = false;
            }
            
        }
        
        //检查所有复选框是否是全选状态==》错误写法
        function ckAllCheck01() {
            var cbs = document.getElementsByClassName("cb");
            // alert(cbs.length);
            
            for(var i=1;i<cbs.length;i++){  //跳过第一个
                if(cbs[i].checked==false){
                    cbs[0].checked = false;
                    return;  //break没用吗?  ==》如果有一个false就结束方法的执行
                }
                if(i<cbs.length-1){
                    // alert(cbs[i].checked);
                    // cbs[0].checked = true;
                    ensurearr_cksNoRepeate(i);    //不是add或者appernd方法  ===》要在continue之前进行添加
                    continue;
                    // alert(cbs[0].checked);
                }
                // arr_cks.push(i);
                ensurearr_cksNoRepeate(i);
                cbs[0].checked = true;
            }
        }
        
        //保证arr_cks数组没有重复
        function ensurearr_cksNoRepeate(index){
            for(var i=0;i<arr_cks.length;i++){
                if(index==arr_cks[i]){
                    return;  //有了就不添加
                }
            }
            arr_cks.push(index);
        }
        
        function deleteRow(obj) {
            var tr = obj.parentNode.parentNode;
            tr.parentNode.removeChild(tr);
            ckAllCheck();   //删除未勾选的,则全选cb被选中
        }
</script>
View Code
posted @ 2018-11-27 18:59  payn  阅读(246)  评论(0)    收藏  举报