JS全选功能代码优化
2014-06-26 00:00 龙恩0707 阅读(2038) 评论(10) 编辑 收藏 举报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地址 供预览:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端