JS全选功能代码优化

JS全选功能代码优化
原文:JS全选功能代码优化

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全选功能演示

posted on 2014-06-26 10:38 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3809573.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win 7 通过事件管理器查看计算机开机关机时间

控制面板-管理工具-事件查看器 视图中开机来源&#xff1a;Kernel-General 事件ID&#xff1a;13 关机来源&#xff1a;Kernel-General 事件ID&#xff1a;12 转载于:https://www.cnblogs.com/hyiam/p/3810499.html

怎么样才能更高效的学习区块链

一、为什么选择区块链 选择区块链作为实践学习的案例&#xff0c;原因有三&#xff1a; 第一&#xff0c;区块链是我最近两三个月刚学习的领域&#xff0c;对我来说也是一门从零开始学习的领域&#xff0c;这样的学习案例最具有指导作用。因为时间没有隔太久&#xff0c;很多…

LeetCode 1702. 修改后的最大二进制字符串(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个二进制字符串 binary &#xff0c;它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改&#xff1a; 操作 1 &#xff1a;如果二进制串包含子字符串 "00" &#xff0c;你可以用 "10" 将其替换。 比方说…

如何在python中精确地进行浮点数的四舍五入

在python试题中碰到这么一道题&#xff1a; 输入三个浮点数,求它们的平均值并保留 1 位小数,对小数后第二位数进行四舍五入,最后输出结果 错误示范 因为涉及到四舍五入&#xff0c;随便搜了一下&#xff0c;发现了好多博客都用round()&#xff0c;就直接拿来用了 round(1.55…

c语言中的位移位操作

先要了解一下C语言里全部的位运算都是指二进制数的位运算。即使输入的是十进制的数&#xff0c;在内存中也是存储为二进制形式。 “<<”使用方法&#xff1a; 格式是&#xff1a;a<<m&#xff0c;a和m必须是整型表达式&#xff0c;要求m>0。 功能&#xff1a…

LeetCode 1704. 判断字符串的两半是否相似

文章目录1. 题目2. 解题1. 题目 给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半&#xff0c;前一半为 a &#xff0c;后一半为 b 。 两个字符串 相似 的前提是它们都含有相同数目的元音&#xff08;‘a’&#xff0c;‘e’&#xff0c;‘i’&#xff0c;‘o’&#…

怎样处理糟糕的代码?

在职业生涯中&#xff0c;程序员难免会遇到糟糕的代码&#xff08;bad code)——但是你并不需要成为一个打败这些糟糕代码的“恶人”。 从轻松的角度来讲&#xff0c;糟糕的代码可以创造大量的就业机会。比如&#xff1a; 需要从诸多优秀开发人员中找一个人来修复错误代码。需…

LeetCode 1706. 球会落何处(模拟)

文章目录1. 题目2. 解题1. 题目 用一个大小为 m x n 的二维网格 grid 表示一个箱子。 你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线挡板&#xff0c;跨过单元格的两个角&#xff0c;可以将球导向左侧或者右侧。 将球导向右侧的挡板跨过左上…

android listview 异步加载图片并防止错位

网上找了一张图&#xff0c; listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象&#xff0c; 重用 convertView 但没有异步操作也不会有问题。 我简单分析一下&#xff1a; 当重用 convertView 时&#x…

Python最实用的25个小技巧

Python 是一种通用的高级编程语言。用它可以做许多事&#xff0c;比如开发桌面 GUI 应用程序、网站和 Web 应用程序等。 并且&#xff0c;通过处理常见的编程任务&#xff0c;Python 能让开发者专注应用程序的核心功能。此外&#xff0c;Python 语言的简单语法规则进一步简化了…

LeetCode 1705. 吃苹果的最大数目(优先队列)

文章目录1. 题目2. 解题1. 题目 有一棵特殊的苹果树&#xff0c;一连 n 天&#xff0c;每天都可以长出若干个苹果。 在第 i 天&#xff0c;树上会长出 apples[i] 个苹果&#xff0c;这些苹果将会在 days[i] 天后&#xff08;也就是说&#xff0c;第 i days[i] 天时&#xff0…

Action重定向总结

[HttpPost]public ActionResult StudentList( string StudName, string studName, DateTime BirthDay, FormCollection form, string controller, string Action, StudentModels student){//其中StudName为aspx页面中标签的name属性(StudName不区分大小写)//其中BirthDay为页面…

全面系统地总结Linux的基本操作(上)

1、 Linux文件和目录 Windows 和 Linux 文件系统 在 windows 平台下&#xff0c;打开"计算机"&#xff0c;我们看到的是一个个的驱动器盘符&#xff1a;每个驱动器都有自己的根目录结构&#xff0c;这样形成了多个树并列的情形&#xff0c;如图所示&#xff1a; 在 …

Pytorch 神经网络nn模块

文章目录1. nn模块2. torch.optim 优化器3. 自定义nn模块4. 权重共享参考 http://pytorch123.com/ 1. nn模块 import torch N, D_in, Hidden_size, D_out 64, 1000, 100, 10torch.nn.Sequential 建立模型&#xff0c;跟 keras 很像 x torch.randn(N, D_in) y torch.randn…

全面系统地总结Linux的基本操作(下)

4、 Linux命令-系统管理 4.1 查看日历:cal cal 命令用于查看当前日历&#xff0c;-y 显示整年日历&#xff1a; 4.2 显示或设置日期:date 设置时间格式&#xff08;需要管理员权限&#xff09;&#xff1a; date [MMDDhhmm[[CC]YY][.ss]] format CC 为年前两位 yy 为年的后…

腾讯QQ企业邮箱POP3/SMTP设置

腾讯企业邮箱支持通过client进行邮件管理。POP3/SMTP协议收发邮件server地址分别例如以下。接收邮件server&#xff1a;pop.exmail.qq.com (port 110)发送邮件server&#xff1a;smtp.exmail.qq.com (port 25)同一时候支持SSL加密方式登录&#xff0c;此时须要更改一下port号。…

免费个人博客:使用hexo+github搭建详细教程

前言 使用github pages服务搭建博客的好处有&#xff1a; 全是静态文件&#xff0c;访问速度快&#xff1b;免费方便&#xff0c;不用花一分钱就可以搭建一个自由的个人博客&#xff0c;不需要服务器不需要后台&#xff1b;可以随意绑定自己的域名&#xff0c;不仔细看的话根…

LeetCode 1235. 规划兼职工作(动态规划+二分查找)

文章目录1. 题目2. 解题1. 题目 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作&#xff0c;每份工作预计从 startTime[i] 开始到 endTime[i] 结束&#xff0c;报酬为 profit[i]。 给你一份兼职工作表&#xff0c;包含开始时间 startTime&#xff0c;结束…

刷新页面,无论点击多少次让Element UI的Message消息提示弹出一个

一、遇到的问题 Element UI的Message消息提示是点击一次触发一次的。在开发的时候经常会作为一些校验提示&#xff0c;但是公司的测试人员在进行测试时会一直点&#xff0c;然后就会出现如下图的情况。虽然客户使用的时候一般来说不会出现这种情况&#xff08;毕竟客户不会闲着…

如何让二维码自适应浏览器的尺寸

一、遇到的问题&#xff1a; 正常浏览网页&#xff0c;二维码正常显示&#xff0c;但是随着浏览器的扩大与缩小&#xff0c;二维码尺寸不会随着屏幕自适应 正常浏览&#xff08;截取部分&#xff09;&#xff1a; 缩小浏览器&#xff08;截取部分&#xf…