Javascript實現表格的全選框

來源:互聯網
上載者:User

這是一個老生常談的問題了,不過還是拿我的解決辦法來晒晒太陽。

最開始我是為Table中的每一項添加屬性 class="item1" 的方式實現的

1. 第一種解決方案

<table border="1" cellpadding="3" cellspacing="0">
    <tr>
        <th>
            <input type="checkbox" onclick="checkAll(this, 'item1');" />
        </th>
        <th>ID</th>
        <th>使用者名稱</th>
    </tr>
    <tr>
        <td>
            <input type="checkbox" class="item1" />
        </td>
        <td>1001</td>
        <td>張三</td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" class="item1" />
        </td>
        <td>1002</td>
        <td>李四</td>
    </tr>
</table>

 

function checkAll(sender, checkClass) {
    var checkItems = document.getElementsByTagName('input');
    for (var i = 0; i < checkItems.length; i++) {
        var checkItem = checkItems[i];
        if (checkItem.type === 'checkbox' && checkItem.className === 'item1') {
            checkItem.checked = sender.checked;
        }
    }
}

 
仔細分析,這裡面使用的 getElementsByTagName 會把頁面上所有的 input 標籤都找到(包括單行文本輸入框,

按鈕,所有的單選和多選框等),然後再執行過濾,這是一種效率不高的方法。

如果能用 getElementsByName 直接擷取需要的多選框,豈不是更高效,就有了下面的方法

2. 第二種解決方案

<table border="1" cellpadding="3" cellspacing="0">
    <tr>
        <th>
            <input type="checkbox" onclick="checkAll2(this, 'item1');" />
        </th>
        <th>ID</th>
        <th>使用者名稱</th>
    </tr>
    <tr>
        <td>
            <input type="checkbox" name="item1" />
        </td>
        <td>1001</td>
        <td>張三</td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" name="item1" />
        </td>
        <td>1002</td>
        <td>李四</td>
    </tr>
</table>

 

function checkAll2(sender, checkName) {
    var checkItems = document.getElementsByName(checkName);
    for (var i = 0; i < checkItems.length; i++) {
        checkItems[i].checked = sender.checked;
    }
}

 

代碼下載


[updated,2009-2-17]

上面這種方法雖然簡潔,但是 getElementsByName 只是 document 的方法,其他DOM對象沒有此方法。(正如留言中 @笛子 所說)

所以效率比較高的方法,還是在table的上下文中使用 getElementsByTagName 來尋找,我們給 table 添加 id 屬性

為 table1。

3. 效率比較高的解決方案

 

<input type="checkbox" onclick="checkAll3(this, 'table1', 'item1');" />

 

function checkAll3(sender, tableId, checkClass) {
    var checkItems = document.getElementById(tableId).getElementsByTagName('input');
    for (var i = 0; i < checkItems.length; i++) {
        var checkItem = checkItems[i];
        if (checkItem.type === 'checkbox' && checkItem.className === 'item1') {
            checkItem.checked = sender.checked;
        }
    }
}

代碼下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.