當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS全选功能代码优化
生活随笔
收集整理的這篇文章主要介紹了
JS全选功能代码优化
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JS全選功能代碼優(yōu)化 原文:JS全選功能代碼優(yōu)化
JS全選功能代碼優(yōu)化
? ? 最近在看javascript MVC那本書,也感覺到自己寫的代碼也并不優(yōu)雅,所以一直在想 用另一種模式來編寫JS代碼,所以針對(duì)之前的簡單的JS全選功能來做個(gè)簡單的demo,使用目前現(xiàn)在的編碼方式來重新編碼,當(dāng)然以后會(huì)一直用這種方式來編寫自己的代碼。下面是如下代碼:
?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);// 選中所有子節(jié)點(diǎn) self._AllChildrenChecked(checked);callback && $.isFunction(callback) && callback(self);});// 單選操作this.container.delegate(cfg.checkItem,'checkItemChange',function(e){// 檢查是否所有子節(jié)點(diǎn)都選中了if( self._isChildrenChecked()){self._checkAll(true);}else {self._checkAll(false);}callback && $.isFunction(callback) && callback(self);});};$.extend(CheckAll.prototype,{/** 選中單個(gè)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);}});},/** 選中/反選 所有的子節(jié)點(diǎn)* @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);}});},/** 是否所有的子節(jié)點(diǎn)都選中了*/_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;},/** 檢查一個(gè)元素是否被選中*/isItemChecked: function(item) {return $(item).is(":checked");},/** 獲取被選中的所有值 或者 屬性 存入數(shù)組* @todo 比如想獲取選中所有項(xiàng)的id或者其他所有項(xiàng)的屬性等操作* @method getValues {public} * @param {elems,attr} 元素所有的dom節(jié)點(diǎn) 獲取元素對(duì)應(yīng)的屬性值* @return 返回?cái)?shù)組 {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"));});當(dāng)然為了查看效果,我也提供了JSFIddler地址 供預(yù)覽:
JS全選功能演示
posted on 2014-06-26 10:38 NET未來之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3809573.html
總結(jié)
以上是生活随笔為你收集整理的JS全选功能代码优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP/UDP测试工具大全
- 下一篇: SpringBoot+Querydsl