热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

jQuery实现checkbox列表的全选、反选功能

本文给大家分享的是一个jQuery实现checkbox列表的全选、反选功能的封装代码,非常的实用,有需要的小伙伴可以参考下

  我们在做列表的时候经常会遇到全选,反选进行批量处理问题,例如:

  我当时就是简单的实现了,然后想封装到公共的js中,封装的太烂,不好意思贴出来了(就是把实现代码之间放到公共js中,然后每个页面都用固定的id,class,现在想想我都不好意思叫他封装了),然后想到之前老大有写过这个功能去看下他怎么写的,真是没有对比就没有伤害啊,这才叫封装;

$(':checkbox[data-check-target]').click(function () {
  var target = $(this).attr('data-check-target');
  if ($(this).prop('checked')) {
    $(target).prop('checked', true);
  } else {
    $(target).prop('checked', false);
  }
});

  首先这儿的高封装性就体现出来了,只有一个自定义的data-check-target属性用于js和html分离后的连接桥梁(而我当时用两个:一个全选复选框,一个子复选框,有关的点都用上了,这样就没起到封装的效果,js和html耦合性太大)(我看到上面的js就在想怎么通过一个连接点把三个相关联的东西联系起来的呢);

  接下来我们继续看具体使用的地方:

  我发现全选复选框用于和js链接的桥梁的自定义属性data-check-target有点特别:

  它的值为“.id-checkbox”,看起来就感觉好奇怪,继续往下看子复选框实现:

  到这儿才豁然开朗原来子复选框的class名称就存放在自定义属性data-check-target中;

var target = $(this).attr('data-check-target');

  然后再通过自定义属性data-check-target拿到子复选框的class,从而达到高封装性;

  我总结的就是js和html通过了自定义属性data-check-target通信,子复选框依赖全选复选框自定义属性data-check-target的值;

  这个例子看下来代码不难,也没有什么地方很难理解的,就是通过一个自定义属性巧妙的完成了低耦合的封装,这也是正是这段代码的难点和精髓;

  我真心抑制不住内心的崇拜,这几行代码太漂亮了。

  PS:上面js为什么用prop而不用attr,因为:如果当前input中初始化未定义checked属性,则该元素没有指定的checked属性,所以.attr()会返回undefined;

对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。


推荐阅读
  • 微信PC版1.2更新:支持自定义公众号菜单与多项新功能
    微信桌面应用程序最新版本1.2 for Windows现已发布,新增了保存聊天记录、使用公众号自定义菜单、同步手机表情等多项实用功能。 ... [详细]
  • 本文讨论了如何在二级域名之间使用document.domain属性来实现Cookie的跨域共享,并分析了一个具体案例中的问题。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • 深入解析 Android 文件下载的三种主流方法
    本文详细探讨了在 Android 平台上实现文件下载功能的三种常见方法:URLConnection、DownloadManager 和 OkHttp。每种方法都有其特点和适用场景,通过本文的分析,开发者可以根据实际需求选择最合适的技术方案。 ... [详细]
  • 探讨了在使用Layui框架时,如何处理表格中固定列与其他列行高不一致的情况,提供了有效的解决方案。 ... [详细]
  • 题目描述了一个病毒检测问题,要求使用AC自动机算法统计目标文本中多个模式串的出现次数。 ... [详细]
  • 本文介绍如何通过简单的代码封装,创建一个能够灵活应用于多种场景的通用选择器,提高前端开发效率。 ... [详细]
  • AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ... [详细]
  • 本文探讨了前端包管理器的核心功能,包括注册机制、文件存储、上传下载、以及依赖分析等关键特性,并介绍了几种流行的前端包管理工具。 ... [详细]
  • 本文详细介绍了使用JavaScript和jQuery进行页面加载初始化的方法,包括不同的实现方式及其应用场景,并探讨了两者在初始化过程中的主要区别。 ... [详细]
  • 本文介绍了数论中常用的两种筛选素数的方法——埃氏筛和欧拉筛。埃氏筛通过标记非素数来实现,其时间复杂度为O(n log log n),而欧拉筛则确保每个合数仅被其最小的质因数筛除一次,从而达到线性时间复杂度O(n)。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • Java中'=='与'equals'方法的区别
    在Java编程语言中,'=='操作符用于比较两个对象的引用是否指向同一个内存位置,而'equals'方法则用于比较两个对象的内容是否相等。本文通过具体示例详细解释了两者的差异,并提供了代码演示。 ... [详细]
  • 本文介绍了如何通过自定义配置类,利用 `WebMvcConfigurer` 接口来扩展 Spring MVC 的功能,实现默认首页的自动跳转,同时避免使用 `@EnableWebMvc` 注解全面接管 Spring MVC 的默认配置。 ... [详细]
  • 解决Beyond Compare许可证过期问题的方法
    本文提供了针对Mac和Windows系统中Beyond Compare软件许可证过期问题的解决方案,包括具体的操作步骤和注意事项。 ... [详细]
author-avatar
AMY_Only
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有