JS全选功能代码优化

2014-06-26 00:00 by 龙恩0707, 470 阅读, 3 评论, 收藏编辑

JS全选功能代码优化

最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能来做个简单的demo,使用目前现在的编码方式来重新编码,当然以后会一直用这种方式来编写自己的代码。下面是如下代码:

JS所有代码:

/**
* JS全选
* @class Checkall
* @param {Object} cfg
* @param {Element|selector} [cfg.container] 限定全选的容器
* @param {selector} cfg.checkAll 全选框
* @param {selector} cfg.checkItem 子选框
*/
function CheckAll(cfg,callback) {
var self = this; this.config = cfg; this.container = $(cfg.container) || document.body; // 全选自定义事件
this.container.delegate(cfg.checkAll,'change',function(e){
$(e.target).trigger('checkAllChange');
}); // 单选自定义事件
this.container.delegate(cfg.checkItem,'change',function(e){
$(e.target).trigger('checkItemChange');
}); // 全选操作
this.container.delegate(cfg.checkAll,'checkAllChange',function(e){ var checked = self.isItemChecked(e.target); self._checkAll(checked); // 选中所有子节点
self._AllChildrenChecked(checked); callback && $.isFunction(callback) && callback(self);
}); // 单选操作
this.container.delegate(cfg.checkItem,'checkItemChange',function(e){ // 检查是否所有子节点都选中了
if( self._isChildrenChecked()){
self._checkAll(true);
}
else {
self._checkAll(false);
}
callback && $.isFunction(callback) && callback(self);
});
}; $.extend(CheckAll.prototype,{ /*
* 选中单个checkbox
* @param item
* @param _isCheck
*/
_checkItem: function(item, _isCheck ){
item = $(item);
item.prop('checked', _isCheck);
},
/*
* 选中/反选所有的 全选按钮
* @method _checkAll {private}
* @param {Boolean} _isCheck
*/
_checkAll: function(_isCheck){
var self = this;
this.container.find(self.config.checkAll).each(function(index,item){
var isAllChecked = self.isItemChecked(item);
if(isAllChecked !== _isCheck) {
self._checkItem(item,_isCheck);
}
});
},
/*
* 选中/反选 所有的子节点
* @method _AllChildrenChecked {private}
*/
_AllChildrenChecked: function(_isCheck){
var self = this;
this.container.find(this.config.checkItem).each(function(index,item){
var itemChecked = self.isItemChecked(item);
if( itemChecked !== _isCheck){
self._checkItem(item, _isCheck);
}
});
},
/*
* 是否所有的子节点都选中了
*/
_isChildrenChecked: function(){
var isCheckAll = true;
var self = this;
this.container.find(this.config.checkItem).each(function(index,item){
if(!self.isItemChecked(item)) {
isCheckAll = false;
}
});
return isCheckAll;
},
/*
* 检查一个元素是否被选中
*/
isItemChecked: function(item) {
return $(item).is(":checked");
},
/*
* 获取被选中的所有值 或者 属性 存入数组
* @todo 比如想获取选中所有项的id或者其他所有项的属性等操作
* @method getValues {public}
* @param {elems,attr} 元素所有的dom节点 获取元素对应的属性值
* @return 返回数组 {rets}
*/
getValues: function(elems,attr) {
var self = this,
rets = [];
$(elems).each(function(index,item){
var isboolean = self.isItemChecked(item);
if(isboolean && $(item).prop(attr)) {
var curAttr = $(item).prop(attr);
rets.push(curAttr);
}
});
return rets;
}
});

HTML代码如下:

<div class="check-list">
<hr>
<div class="J_CheckListContainerBasic">
<h4>基本使用</h4> <div class="check-all">
<label>全选 <input type="checkbox" class="J_CheckAll"></label>
<ul class="sub-checkbox">
<li><label>选中 <input type="checkbox" class="J_CheckItem" value="1"></label></li>
<li><label>选中 <input type="checkbox" class="J_CheckItem" value="2"></label></li>
<li><label>选中 <input type="checkbox" class="J_CheckItem" value="3"></label></li>
</ul>
</div>
</div>
</div>

JS初始化如下:

var checkAll=  new CheckAll({
container: '.J_CheckListContainerBasic',
checkAll: '.J_CheckAll',
checkItem: '.J_CheckItem'
},function(){
console.log(checkAll.getValues('.J_CheckItem',"value"));
});

当然为了查看效果,我也提供了JSFIddler地址 供预览:

JS全选功能演示

 
 

最新文章

  1. 修改hive分区表,在分区列前增加一个字段
  2. WordPress访问打开速度很慢的几种解决方法
  3. Java基础知识学习(九)
  4. mac平台下面ruby环境搭建
  5. SmartForms 小技巧
  6. Django之模板语言
  7. java单例模式(两种常用模式)
  8. 超文本传输协议-HTTP/1.1
  9. 微信授权登录(PHP)
  10. 关于Aop切面中的@Before @Around等操作顺序的说明
  11. storm集群架构
  12. 小程序引入百度api天气预报
  13. Confluence 6 配置 简易信息聚合(RSS)
  14. instr()函数--支持模糊查询
  15. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 0.Learning Goals
  16. 9.6 翻译系列:数据注解之Index特性【EF 6 Code-First系列】
  17. java 中获得 资源文件方法
  18. socket.io带中文时客户端无法响应
  19. RxJava重温基础
  20. python3 练习题100例 (四)

热门文章

  1. 前端是Sencha Touch+ Cordova(转)
  2. 《Java并发编程实战》第十三章 显示锁 读书笔记
  3. Ruby: Count unique elements and their occurences in an array
  4. Nyoj 星际之门(一)(Cayley定理)
  5. Cloudera CDH 5集群搭建(yum 方式)
  6. js中arguments
  7. Appium键盘操作
  8. html转换为纯文本,支持撇号
  9. Oracle OS认证和口令文件认证方法
  10. MVC验证06-自定义错误信息