javascrip练习——简单模拟全选功能

简单练习,老司机请绕行。

html代码:

<table id="m_table">
    <colgroup>
        <col style="width:30%;"/>
        <col style="width:35%;"/>
        <col style="width:35%;"/>
    </colgroup>
    <tr>
        <th><input class="c_all" type="checkbox" /> 全选</th>
        <th></th>
        <th></th>
    </tr>
    <tr>
        <td><input class="c_one" type="checkbox" /></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td><input class="c_one" type="checkbox" /></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td><input class="c_one" type="checkbox" /></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td><input class="c_one" type="checkbox" /></td>
        <td></td>
        <td></td>
    </tr>
</table>

为使页面好看,加一段css:

* { padding: 0; margin: 0; }
html,body { width: 100%; height: 100%; font-family: 'Arial'; }
table{border-collapse: collapse;}
#m_table { width: 500px; height: auto; color: #333; font-size: 14px; }
#m_table tr th { background: #eaeaea; padding: 10px 30px; text-align: left;}
#m_table tr td { border: 1px solid #eaeaea;  padding: 10px 30px; }

正菜如下:

var c_all = document.getElementsByClassName("c_all")[0];
var c_one = document.getElementsByClassName("c_one");
var len = c_one.length;

c_all.onclick = function () {
    if( this.checked ){
        for(var i = 0; i < len; i++) {
            c_one[i].checked = this.checked;
        }
    }else{
        for(var i = 0; i < len; i++) {
            c_one[i].checked = false;
        }
    }
}

for(var i = 0; i < len; i++){
    c_one[i].onclick = function(){
        fn();
    }
}
function fn(){
    var arr = [];
    for (var i = 0; i < len; i++) {
        if (c_one[i].checked) {
            arr.push('1');
        } else {
            arr.push('0');
        }
    }
    if (arr.indexOf('0') >= 0) {
        c_all.checked = false;
    } else {
        c_all.checked = true;
    }
}

为保证’getElementsByClassName’能正常运行,最好在代码里加上以下检测代码:

window.onload = function(){
    if (!document.getElementsByClassName) {
        document.getElementsByClassName = function (cls) {
            var ret = [];
            var els = document.getElementsByTagName('*');
            for (var i = 0, len = els.length; i < len; i++) {
                if (els[i].className.indexOf(cls + ' ') >=0 || els[i].className.indexOf(' ' + cls + ' ') >=0 || els[i].className.indexOf(' ' + cls) >=0) {
                    ret.push(els[i]);
                }
            }
            return ret;
        }
    }
}

用jQuery改写一下上面的代码:

var $c_one = $(".c_one");
var $c_all = $(".c_all");
var len = $c_one.length;

$c_all.click(function() {
    if( $(this).prop("checked") ){
        $c_one.prop("checked", "true");
    }else{
        $c_one.prop("checked", "");
    }
}); 
$c_one.click(function() {
    fn();
});
function fn(){
    var arr = [];
    for (var i = 0; i < len; i++) {
        if ($c_one.eq(i).prop("checked")) {
            arr.push('1');
        } else {
            arr.push('0');
        }
    }
    if (arr.indexOf('0') >= 0) {
        $c_all.prop("checked", "");
    } else {
        $c_all.prop("checked", "true");
    }
}

下面这种思路是通过绑定类名来实现的,(很巧妙)

$c_one.click(function() {
    fn1();
    fn2();
});
function fn1(){
    $c_one.each(function() {
        if( $(this).prop("checked") ){
            $(this).addClass('act');
        }else {
            $(this).removeClass('act');
        }
    })
}
function fn2(){
    var len1 = $(".act").length;
    if (len == len1) {
        $c_all.prop("checked", "true");
    } else {
        $c_all.prop("checked", "");
    }
}

(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值