目录
5. 实现bilibili 点击小滑块移动效果(未看这部分移动端)
1. 全选文本框案例(重点)
伪类选择器 :checked 选择被勾选的复选框
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #c0c0c0;
width: 500px;
margin: 100px auto;
text-align: center;
}
th {
background-color: #09c;
font: bold 16px "微软雅黑";
color: #fff;
height: 24px;
}
td {
border: 1px solid #d0d0d0;
color: #404060;
padding: 10px;
}
.allCheck {
width: 80px;
}
</style>
</head>
<body>
<table>
<tr>
<th class="allCheck">
<input type="checkbox" name="" id="checkAll"> <span class="all">全选</span>
</th>
<th>商品</th>
<th>商家</th>
<th>价格</th>
</tr>
<tr>
<td>
<input type="checkbox" name="check" class="ck">
</td>
<td>小米手机</td>
<td>小米</td>
<td>¥1999</td>
</tr>
<tr>
<td>
<input type="checkbox" name="check" class="ck">
</td>
<td>小米净水器</td>
<td>小米</td>
<td>¥4999</td>
</tr>
<tr>
<td>
<input type="checkbox" name="check" class="ck">
</td>
<td>小米电视</td>
<td>小米</td>
<td>¥5999</td>
</tr>
</table>
<script>
// 1.获取大复选框元素
const all = document.querySelector('#checkAll')
// 2. 获取所有的小复选框
const cks = document.querySelectorAll('.ck')
// 3. 点击大复选框 注册事件
all.addEventListener('click', function () {
// 得到大复选框的选中状态
// console.log(this.checked) //得到的是 true 或 false
// 4. 遍历所有的小复选框,让小复选框的checked = 大复选框的checked
for (let i = 0; i < cks.length; i++) {
cks[i].checked = this.checked
}
})
// 5. 小复选框控制大复选框
for (let i = 0; i < cks.length; i++) {
// 5.1 给所有的小复选框添加点击事件
cks[i].addEventListener('click', function () {
// 判断选中的小复选框个数 是不是等于 总的小复选框个数
// 一定要写到点击里面 因为每次点击要获得新的选中个数
// console.log(document.querySelectorAll('.ck:checked').length)
// console.log(document.querySelectorAll('.ck:checked').length === cks.length)
all.checked = document.querySelectorAll('.ck:checked').length === cks.length
})
}
</script>
</body>
</html>
2. 事件委托版 Tab 栏切换
注意通过自定义属性获得的值是字符串,不能直接进行加法 如e.target.dataset.id + 1进行的是拼串,故须对e.target.dataset.id进行转换。
对于使大盒子的对应元素添加active 类,有两种方法:
1. 直接使用索引获得该DOM对象,注意是第 { i + 1 }个item ,因为 i 是从 0 开始的,这种不需要获得所有的item
document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')
2. 先获得所有的item 对象(此时是一个伪数组),然后根据伪数组下标确定添加active 的元素
items[i].classList.add('active')
在最开始获得元素时须获得 items
const items = document.querySelectorAll('.tab-content .item')