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實現了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM