JavaScript 实现全选 / 反选功能

  版权声明:未经授权,内容严禁转载!  


构建主体界面

编写 HTML 代码 和 CSS 代码,设计主题界面

<style>
#user {
width: 500px;
text-align: center;
} #user, #user th, #user td {
border: 1px solid #000;
border-collapse: collapse;
}
</style> <h1>管理员列表</h1>
<table id="user">
<thead>
<tr>
<th><input type="checkbox">全选</th>
<th>管理员ID</th>
<th>姓名</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>1</td>
<td>Tom</td>
<td>删除修改</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>2</td>
<td>Jayvee</td>
<td>删除修改</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>3</td>
<td>Mia</td>
<td>删除修改</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>4</td>
<td>Jack</td>
<td>删除修改</td>
</tr>
</tbody>
</table>
<button id="reverse" type="button">反向选择</button>
<button id="del" type="button">删除选定</button>

    

思路引导

  设计完主体界面,接下来就要编写 JavaScript 脚本实现 全选/反选 功能,如果要单独建立一个新的 js 文件记得要在HTML界面进行导入命令,导入要在HTML界面最后。

  因为浏览器加载页面的时候从上而下,如果将 JavaScript 文件放在 body上面,在浏览器加载 JavaScript 时HTML 文件的各个标签还没有加载,JavaScript中使用的标签会找不到,出现错误!

实现全选功能

编写JavaScript脚本代码实现 全选功能

// 1 .获取所有触发事件的元素:全选 四个复选框 反选 删除

// 全选
var chbAll = document.querySelector("#user thead tr th:first-child>input");
// console.log(chbAll);
// 四个复选框
var chbs = document.querySelectorAll("#user tbody tr td:first-child>input");
// console.log(chbs);
// 反选
var reverse = document.querySelector("#reverse");
// console.log(reverse);
// 删除选定
var del = document.querySelector("#del");
// console.log(del); // 实现全选功能
// 绑定事件处理函数
chbAll.onclick = function () {
//判断全选当前是否被选中 // 第一种方法
// if (chbAll.checked) {
// // 如果选中四个复选框全选中
// // 循环四个复选框设置 checked 为选中 true
// for (var i = 0; i < chbs.length; i++) {
// chbs[i].checked = true;
// }
// }else {
// // 如果没选中四个复选框全不选中
// // 循环四个复选框设置 checked 为不选中 false
// for (var i = 0; i < chbs.length; i++) {
// chbs[i].checked = false;
// }
// } // 第二种方法。
// 上面方法太冗余,循环设置四个复选框的选中状态和上面全选框一致即可
// 减少代码,简单!
for (var i = 0; i < chbs.length; i++) {
// chbs[i].checked = chbAll.checked;
// 建议使用 this 关键字,以后万一改掉了 id 名字也不会影响~
chbs[i].checked = this.checked;
} }

  

实现四个小复选框的功能

1. 点击其中一个小复选框要判断这四个小的复选框是否全被选中,如果四个全被选中需要将全选按钮勾上。

2. 如果点击其中一个取消了选中,那么全选按钮就是取消的。

总结:点击之后要判断这小复选框是被选中还是取消,如果是选中,就要判断这四个是不是全选中,如果全选中则全选框被选中,如果不是则选中自己。如果点击之后是取消选中,则全选框一定是取消选中的。

继续编写 JavaScript 脚本代码,实现四个小复选框功能
// 为 tbody 中的每一个 chb 绑定事件处理函数
for (var i = 0; i < chbs.length; i++) {
chbs[i].onclick = function () {
// 判断当前chb是选中韩式取消操作
if (this.checked) {
// 如果选中,判断是否都是选中
// (查找tbody中是否有 未被选中的)
var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
if (unchecked == null) {
// 如果没有,设置全选被选中
chbAll.checked = true;
}
} else {
// 如果是取消,则自己取消并且全选也取消
chbAll.checked = false;
} }
}

  

实现 反向选择 和 删除选定 功能

编辑 JavaScript 脚本代码实现 反向选择 和 删除选定 功能

// 反选
reverse.onclick = function () {
// 循环 实现反选
for (var i = 0; i < chbs.length; i++) {
chbs[i].checked = !chbs[i].checked;
}
// 如果选中,判断是否都是选中
// (查找tbody中是否有 未被选中的)
var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
if (unchecked == null) {
// 如果没有,设置全选被选中
chbAll.checked = true;
} else {
chbAll.checked = false;
}
} // 取消选定
del.onclick = function () {
var checked = document.querySelectorAll("#user tbody tr td:first-child>input:checked");
if (checked !== null) {
for (var i = 0; i < checked.length; i++) {
checked[i].checked = false;
}
}
if (chbAll.checked) chbAll.checked = false;
}

  

完整案例代码

 HTML + CSS

<style>
#user {
width: 500px;
text-align: center;
} #user, #user th, #user td {
border: 1px solid #000;
border-collapse: collapse;
}
</style> <h1>管理员列表</h1>
<table id="user">
<thead>
<tr>
<th><input type="checkbox">全选</th>
<th>管理员ID</th>
<th>姓名</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>1</td>
<td>Tom</td>
<td>删除修改</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>2</td>
<td>Jayvee</td>
<td>删除修改</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>3</td>
<td>Mia</td>
<td>删除修改</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>4</td>
<td>Jack</td>
<td>删除修改</td>
</tr>
</tbody>
</table>
<button id="reverse" type="button">反向选择</button>
<button id="del" type="button">删除选定</button> <script src="mJS.js"></script>

JavaScript 脚本

// 1 .获取所有触发事件的元素:全选 四个复选框 反选 删除

// 全选
var chbAll = document.querySelector("#user thead tr th:first-child>input");
// console.log(chbAll);
// 四个复选框
var chbs = document.querySelectorAll("#user tbody tr td:first-child>input");
// console.log(chbs);
// 反选
var reverse = document.querySelector("#reverse");
// console.log(reverse);
// 删除选定
var del = document.querySelector("#del");
// console.log(del); // 实现全选功能
// 绑定事件处理函数
chbAll.onclick = function () {
//判断全选当前是否被选中 // 第一种方法
// if (chbAll.checked) {
// // 如果选中四个复选框全选中
// // 循环四个复选框设置 checked 为选中 true
// for (var i = 0; i < chbs.length; i++) {
// chbs[i].checked = true;
// }
// }else {
// // 如果没选中四个复选框全不选中
// // 循环四个复选框设置 checked 为不选中 false
// for (var i = 0; i < chbs.length; i++) {
// chbs[i].checked = false;
// }
// } // 第二种方法。
// 上面方法太冗余,循环设置四个复选框的选中状态和上面全选框一致即可
// 减少代码,简单!
for (var i = 0; i < chbs.length; i++) {
// chbs[i].checked = chbAll.checked;
// 建议使用 this 关键字,以后万一改掉了 id 名字也不会影响~
chbs[i].checked = this.checked;
} } // 为 tbody 中的每一个 chb 绑定事件处理函数
for (var i = 0; i < chbs.length; i++) {
chbs[i].onclick = function () {
// 判断当前chb是选中韩式取消操作
if (this.checked) {
// 如果选中,判断是否都是选中
// (查找tbody中是否有 未被选中的)
var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
if (unchecked == null) {
// 如果没有,设置全选被选中
chbAll.checked = true;
}
} else {
// 如果是取消,则自己取消并且全选也取消
chbAll.checked = false;
} }
} // 反选
reverse.onclick = function () {
// 循环 实现反选
for (var i = 0; i < chbs.length; i++) {
chbs[i].checked = !chbs[i].checked;
}
// 如果选中,判断是否都是选中
// (查找tbody中是否有 未被选中的)
var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
if (unchecked == null) {
// 如果没有,设置全选被选中
chbAll.checked = true;
} else {
chbAll.checked = false;
}
} // 取消选定
del.onclick = function () {
var checked = document.querySelectorAll("#user tbody tr td:first-child>input:checked");
if (checked !== null) {
for (var i = 0; i < checked.length; i++) {
checked[i].checked = false;
}
}
if (chbAll.checked) chbAll.checked = false;
}

结束了,这个案例用在 购物车 还是蛮好的~

JavaScript 实现全选 / 反选功能的更多相关文章

  1. jquery 书写全选反选功能

    书写一个后台管理中用到的全选反选功能.代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. 表单javascript checkbox全选 反选 全不选

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. 用javascript实现全选/反选组件

    以下是本人制作的全选/反选 组件,供广大同行参考.指正: 效果如图: 在实现的过程中,全选和全部取消选中这两个功能较为简单,只需用for循环遍历所有复选框为true或false即可.反选也较为简单,也 ...

  4. JavaScript、全选反选-课堂笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. jquery实现全选/反选功能

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  6. 用JavaScript实现全选-反选

    实现全选-反选 在日常生活我们会遇到需要全选-反选的地方,其实用JavaScript也能实现. 样式如下所示: 样式代码如下所示: <!DOCTYPE html PUBLIC "-// ...

  7. JS全选反选功能

    总选框:<input type="checkbox" class="all" name="all"> 子选框: <inpu ...

  8. jQuery实现全选反选功能

    废话不说,直接上代码! <html> <head> <meta http-equiv="Content-Type" content="tex ...

  9. JQuery实现列表中复选框全选反选功能封装

    我们在做列表的时候经常会遇到全选,反选进行批量处理问题,例如: 我当时就是简单的实现了,然后想封装到公共的js中,封装的太烂,不好意思贴出来了(就是把实现代码之间放到公共js中,然后每个页面都用固定的 ...

随机推荐

  1. 线性DP总结(LIS,LCS,LCIS,最长子段和)

    做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状态转移方程 for(int i=2;i<=n;i++) { ...

  2. Centos升级安装.Net core 1.1

    VS2017已经发布了一个多月了,最期待的功能就是.net core的更新,终于去掉了繁琐了project.json的文件配置.我们尝试打开一个VS2015的.net core项目,会自动升级至.ne ...

  3. 2015 湘潭大学程序设计比赛(Internet)--E题--烦人的异或

    烦人的异或 Accepted : 27   Submit : 102 Time Limit : 5000 MS   Memory Limit : 65536 KB 题目描述 如下图,有一N*M的表格, ...

  4. 洛谷P3243 [HNOI2015]菜肴制作 拓扑排序+贪心

    正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5, ...

  5. 【Python】【Web.py】python调用html【问题:echart图标调用html上未显示】

    code调用123.html和echarts.min.js文件 code.py import web import execjs urls = ( '/hello', 'hello', ) app = ...

  6. xls的读写

    import xlrd # 读取xls文件 # 打开xls文件 data = xlrd.open_workbook('x1.xls') print(type(data)) # 获取表Sheet1 ta ...

  7. Intel 设计缺陷背后的原因是什么? | Linux 中国

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79386769 wx_fmt=jpeg& ...

  8. ssm后台开发及发布

    本文详细讲解一下后台的创建及发布过程,包括踩过的坑 1:首先创建war包形式的maven工程 File>new>Maven project>Create a simple proje ...

  9. POJ1789:Truck History(Prim算法)

    http://poj.org/problem?id=1789 Description Advanced Cargo Movement, Ltd. uses trucks of different ty ...

  10. 深入理解python之二——python列表和元组

    从一开始学习python的时候,很多人就听到的是元组和列表差不多,区别就是元组不可以改变,列表可以改变. 从数据结构来说,这两者都应当属于数组,元组属于静态的数组,而列表属于动态数组.稍后再内存的分配 ...