jQuery练习
练习一:爱好选择器
$(function () {
//1.点击全选
var $checkedAllBox = $(\'#checkedAllBox\')
var $checkedAllBtn = $(\'#checkedAllBtn\')
var $items = $(\':checkbox[name=items]\')
$checkedAllBtn.click(function () {
$items.prop(\'checked\',true)
$checkedAllBox.prop(\'checked\',true)
})
//2.点击全不选
var $checkedNoBtn = $(\'#checkedNoBtn\')
$checkedNoBtn.click(function () {
$items.prop(\'checked\',false)
$checkedAllBox.prop(\'checked\',true)
})
//3.反选
var $checkedRevBtn = $(\'#checkedRevBtn\')
$checkedRevBtn.click(function () {
$items.each(function () {
this.checked = !this.checked
})
$checkedAllBox.prop(\'checked\',$items.filter(\':not(:checked)\').length===0)
})
//4.提交
var $sendBtn = $(\'#sendBtn\')
$sendBtn.click(function () {
$items.each(function () {
if(this.checked){
console.log(this.value)
}
})
})
//5.全选/全不选
$checkedAllBox.click(function () {
$items.prop(\'checked\',this.checked)
})
//6.点击爱好,更新全选/全不选状态
$items.click(function () {
$checkedAllBox.prop(\'checked\',$items.filter(\':not(:checked)\').length===0)
})
})
练习二:添加删除记录
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.4.0.min.js" type="text/javascript"></script>
<script type="text/javascript">
/**
* 1.添加
* 2.删除
*/
$(function () {
$(\'#addEmpButton\').click(function () {
//1.收集输入的数据
var $name = $(\'#name\')
var $email = $(\'#email\')
var $salary = $(\'#salary\')
var name = $name.val()
var email = $email.val()
var salary = $salary.val()
//2.生成对应的<tr>标签结构,并插入#emplyeeTable中
$(\'<tr></tr>\').append(\'<td>\'+ name +\'</td>\')
.append(\'<td>\'+ email +\'</td>\')
.append(\'<td>\'+ salary +\'</td>\')
.append(\'<td><a href="">delete</a></td>\')
.appendTo(\'#employeetable>tbody\')
.find(\'a\').click(clickDelete)
//3.清除输入
$name.val(\'\')
$email.val(\'\')
$salary.val(\'\')
})
//给所有删除链接绑定点击监听
$(\'#employeetable a\').click(clickDelete)
//$(\'#employeetable\').delegate(\'a\',\'click\',clickDelete
//删除函数
function clickDelete() {
var $tr = $(this).parent().parent()
var name = $tr.children(\':first\').html()
if(confirm(\'确定删除\'+ name +\'吗\')){
$tr.remove()
}
return false
}
})
</script>
</head>
<body>
<br><br>添加新员工<br><br>
name:<input type="text" name="name" id="name" >
email:<input type="text" name="email" id="email" >
salary:<input type="text" name="salary" id="salary">
<br><br>
<button id="addEmpButton">Submit</button>
<br><br>
<hr>
<br><br>
<table id="employeetable" border="1" cellpadding="5" cellspacing=0>
<tbody>
<tr>
<td>Name</td>
<td>Email</td>
<td>Salary</td>
<td> </td>
</tr>
<tr>
<td>Tom</td>
<td>tom@tom.com</td>
<td>5000</td>
<td><a href="">delete</a> </td>
</tr>
<tr>
<td>Jerry</td>
<td>jerry@tsohu.com</td>
<td>8000</td>
<td><a href="">delete</a> </td>
</tr>
</tbody>
</table>
</body>
</html>
练习三:图片轮播
$(function () {
/**
* 1.点击向右(左)的图标,平滑切换到下(上)一页
* 2.无限循环切换:第一页的上一页为最后页,最后一页的下一页是第一页
* 3.每隔3s自动滑动到下一页
* 4.当鼠标进入图片区域时,自动切换停止,当鼠标离开后,又开始自动切换
* 5.切换页面时,下面的圆点也同步更新
* 6.点击圆点图标切换到对应的页
*
* bug:快速点击时出现问题
*/
var $container = $(\'#container\')
var $list = $(\'#list\')
var $points = $(\'#pointsDiv\')
var $prev = $(\'#prev\')
var $next = $(\'#next\')
var PAGE_WIDTH=600//页的宽度
var TIME =400//翻页的持续时间
var ITEM_TIME = 20//单元移动的间隔时间
var imgCount = $points.length
var index = 0//当前下标
var moving = false//标识是否正在翻页
//1.点击向右(左)的图标,平滑切换到下(上)一页
$prev.click(function () {
nextPage(false)
})
$next.click(function () {
nextPage(true)
})
//2.每隔3s自动滑动到下一页
var intervalId= setInterval(function () {
nextPage(true)
},1000)
//3.当鼠标进入图片区域时,自动切换停止,当鼠标离开后,又开始自动切换
$container.hover(function () {
//清除定时器
clearInterval(intervalId)
},function () {
intervalId= setInterval(function () {
nextPage(true)
},1000)
})
//6.点击圆点图标切换到对应的页
$points.click(function () {
//目标页的下标
var targetIndex = $(this).index()
//只有当点击的不是当前页的圆点时才翻页
if (targetIndex != index){
nextPage(targetIndex)
}
})
/**
* 平滑翻页
* @param next
* true:下一页
* false:上一页
* 数值:指定下标页
*/
function nextPage(next) {
/*
总的偏移量:offset
总的时间:TIME=400
单元移动的间隔时间:ITEM_TIME =20
单元移动的偏移量:itemOffset = offset/(TIME/ITEM_TIME)
*/
//如果正在翻页,直接结束
if (moving){
return
}
moving = true//标识正在翻页
//总的偏移量:offset
var offset = 0
if (typeof next === \'boolean\'){
offset = next ? -PAGE_WIDTH:PAGE_WIDTH
} else {
offset = -(next-index)*PAGE_WIDTH
}
//计算单位移动的偏移量:itemOffset
var itemOffset = offset/(TIME/ITEM_TIME)
//得到当前left值
var currLeft = $list.position().left
//计算出目标处的left值
var targetLeft = currLeft + offset
//启动循环定时器不断更新$list的left,到达目标处停止定时器
var intervalId = setInterval(function () {
//计算最新的currleft
currLeft +=itemOffset
if (currLeft === targetLeft){//到达目标位置
//清除定时器
clearInterval(intervalId)
//标识翻页停止
moving = false
//如果到达了最右边的图片(1.jpg),跳转到最左边的第2张图片(1.jpg)
if (currLeft===-(imgCount+1)*PAGE_WIDTH){
currLeft = -PAGE_WIDTH
}else if (currLeft===0){
//如果到达了最左边的图片(5.jpg),跳转到最右边的倒数第2张图片(5.jpg)
currLeft = -imgCount * PAGE_WIDTH
}
}
$list.css(\'left\',currLeft)
},ITEM_TIME)
//更新圆点
updatePoints(next)
}
/**
* 更新圆点
* @param next
*/
function updatePoints(next) {
//计算目标圆点的下标targetIndex
var targetIndex = 0
if (typeof next === \'boolean\'){
if (next){
targetIndex = index + 1
if (targetIndex === imgCount){
targetIndex = 0
}
} else{
targetIndex = index - 1
if (targetIndex === -1){
targetIndex = imgCount-1
}
}
}else {
targetIndex = next
}
//将当前index的<span>class的on移除
$points.eq(index).removeClass(\'on\')
//给目标圆点添加class=\'on\'
$points.eq(targetIndex).addClass(\'on\')
//将index更新为targetIndex
index = targetIndex
}
})