• js和jq实现全选反选


    在前端中用到全选反选的案例并不少,在这里呢我就实现这个功能给大家参考参考。

    这里呢就先贴上我的html和css代码

    <div class="wrap">
                <table>
                    <thead>
                        <tr>
                            <th>
                                <input type="checkbox" id="theadInp" />
                            </th>
                            <th>快递</th>
                            <th>收件人</th>
                            <th>电话</th>
                        </tr>
                    </thead>
                    <tbody id="tbody">
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>顺丰</td>
                            <td>张大大</td>
                            <td>186*****897
                        </tr>
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>韵达</td>
                            <td>张全蛋</td>
                            <td>186*****897
                        </tr>
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>圆通</td>
                            <td>韩非</td>
                            <td>186*****897
                        </tr>
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>中国邮政</td>
                            <td>卫庄</td>
                            <td>186*****897
                        </tr>
                    </tbody>
                </table>
            </div>

    这是html部分的,下面呢,我附上css部分的代码:

        * {
                    padding: 0;
                    margin: 0;
                }
                
                .wrap {
                    width: 300px;
                    margin: 100px auto 0;
                }
                
                table {
                    border-collapse: collapse;
                    border-spacing: 0;
                    border: 1px solid #c0c0c0;
                    width: 300px;
                }
                
                th,
                td {
                    border: 1px solid #d0d0d0;
                    color: #404060;
                    padding: 10px;
                }
                
                th {
                    background-color:rgb(51, 199, 18);
                    font: bold 16px "微软雅黑";
                    color: #fff;
                }
                
                td {
                    font: 14px "微软雅黑";
                }
                
                tbody tr {
                    background-color: #f0f0f0;
                }
                
                tbody tr:hover {
                    cursor: pointer;
                    background-color: #fafafa;
                }

    展示出来的布局是这样的:

    好了,下面我们就开始讲重点把,做之前的呢,一定要理清思路,只有理清思路的才能好下手做啊

    我们要通过点击第一个input标签来改变所有input标签的选择状态,

    1.首先要获取到控制总选择状态的input标签,我们命名为inputAll

    2.然后把每个input标签存到一个数组中去,我们命名为icheck

    3.点击inputAll来改变状态,并且让icheck里面的input能跟着他的状态来变化

    代码如下:

    window.onload = function() {
                    //先获得控制全选反选的input标签
                    var inputAll = document.getElementById("theadInp");
                    //获得tbody
                    var tbody = document.getElementById("tbody");
                    //获得天tbody里面的子元素
                    var icheck = tbody.getElementsByTagName("input");
                    console.log(icheck);
                    //给控制全选反选的input标签绑定事件
                    inputAll.onclick = function() {
                        //遍历tbody里面的input标签,把inputAll的状态赋值给icheck
                        for(var i = 0; i < icheck.length; i++) {
                            icheck[i].checked = this.checked;
                        }
                    }

    上面都有写注释,大家肯定都能看的懂的,也没难点,就不需要解释了。

    看下面:

    以为这样就结束了事了吗?然而并没有。里面还是有个小问题的,就是当下面的input有一个以上没选中的时候,那么inputAll的状态也必须要跟着变化,总不能只让人家听他一个人的话吧,这就太不像话了。

    for(var i = 0; i < icheck.length; i++) {
                        //给每个子元素都绑定事件
                        icheck[i].onclick = function() {
                            //点击的时候在遍历icheck,看看是否有没选中的
                            for(var j = 0; j < icheck.length; j++) {
                                //定义一个标志来记录
                                var flag = true;
                                if(icheck[j].checked == false) {
                                    flag = false;
                                }
                            }
                            inputAll.checked=flag;
                        }
                    }

    jq实现方法:

    是不是觉得js实现起来特别的繁琐,没关系,我们有更加简单的实现办法,那就jq来实现

    $(function() {
                    //实现全选反选
                    $("#theadInp").on('click', function() {
                        $("tbody input:checkbox").prop("checked", $(this).prop('checked'));
                    })
                    $("tbody input:checkbox").on('click', function() {
                        //当选中的长度等于checkbox的长度的时候,就让控制全选反选的checkbox设置为选中,否则就为未选中
                        if($("tbody input:checkbox").length === $("tbody input:checked").length) {
                            $("#theadInp").prop("checked", true);
                        } else {
                            $("#theadInp").prop("checked", false);
                        }
                    })
                })

    看,jq方法是不是简单的太多了,所以呢,能用jq就别人js实现了

  • 相关阅读:
    常用Linux命令
    KDevolop使用小技巧
    微软在5/10/2006发布新版的LINQ Preview (May 2006).msi 无为而为
    盼望已久的Office Live Beta 已经发布,大家可以去尝尝鲜 无为而为
    需求工程:TFS MSF模版中UI Flow model的应用 无为而为
    Visual Studio 2005 Team Foundation Server 试用版及中文说明文件下载,中文版可能在2006年5月15日发布 无为而为
    让我们努力从“不可救药的乐观主义者”华尔街知名投资人约翰。多尔那里学点东西(永远放弃尝试改变这个世界) 无为而为
    Visual Studio 2005 开发Office(Word/Excel)项目的若干资源和示例 无为而为
    IT人看《国富论》系列:第一篇之第十章:论工资与利润随劳动与资本用途的不同而不同,分析分析IT界薪水起伏的原因 无为而为
    非正常状态,彻底删除Exchange服务器 无为而为
  • 原文地址:https://www.cnblogs.com/cythia/p/6663434.html
Copyright © 2020-2023  润新知