jQuery事件
- 原生Javascript事件
- jQuery
原生JS事件绑定
直接写几个案例
开关灯示例
<head>
<style>
.c1{
width: 200px;
height: 200px;
}
.bg_green {
background-color: green;
}
.bg_red {
background-color: red;
}
</style>
</head>
<body><div id="d1" class="c1 bg_red bg_green"></div>
<button id="d2">变色</button>
<script>
let btnEle = document.getElementById('d2')
let divEle = document.getElementById('d1')
btnEle.onclick = function () { // 绑定点击事件
divEle.classList.toggle('bg_red')
//有这个class,就删除,显示绿色,没有就添加,显示红色
}
</script>
</body>
焦点框案例
搜索框,自带文字,得到焦点之后文字消失
<!--onfocus事件,改变input标签的value为空-->
<!--onblur失去焦点事件,将input的value改回原样-->
<body>
<input type="text" value="没有焦点" id="d1">
<script>
let iptEle = document.querySelector('#d1');
iptEle.onfocus = function () {
iptEle.value = '';
}
iptEle.onblur = function () {
iptEle.value = '失去焦点';
}
</script>
</body>
实时显示时间
//访问页面之后,将访问的时间展示到input框中
//动态展示当前时间,设置一个循环计时器,循环改变时间
//问题:按多次开始按钮,会开启多个定时器,按结束,只能结束一个定时器
//解决:设置一个变量,有值的时候不开启计时器,没有值的时候才能开启。在清除计时器的时候重置计时器为null
<body>
<div id="d1">Time</div>
<div>
<button id="st">Start</button>
<button id="ed">Stop</button>
</div>
<script>
let t = null
let divEle = document.querySelector('#d1');
let stEle = document.querySelector('#st');
let edEle = document.querySelector('#ed');
//展示时间函数。获得一个时间对象,改变div中的字
function showTime() {
let currentTime = new Date();
divEle.innerText = currentTime.toLocaleString()
}
//start按钮的点击事件,检查是否已经有计时器,如果没有,开启一个计时器,每一秒调用一次展示时间
stEle.onclick = function () {
if(!t){
t = setInterval(showTime,1000)
}
}
//停止显示按钮,清除计时器
edEle.onclick = function () {
clearInterval(t)
t = null
}
</script>
</body>
省市联动
两个select框,选择了省,在第二个select框显示对应的市:仅模拟
<body>
<select name="" id="d1">
<option value="" selected disabled>--请选择--</option>
</select>
<select name="" id="d2"></select>
<script>
let proEle = document.getElementById('d1')
let cityEle = document.getElementById('d2')
// 先模拟省市数据
data = {
"河北": ["廊坊", "邯郸", '唐山'],
"北京": ["朝阳区", "海淀区", '昌平区'],
"山东": ["威海市", "烟台市", '临沂市'],
'上海': ['浦东新区', '静安区', '黄浦区'],
'深圳': ['南山区', '宝安区', '福田区']
};
// 选for循环获取省
for (let key in data) {
// 将省信息做成一个个option标签 添加到第一个select框中
// 1 创建option标签
let opEle = document.createElement('option')
// 2 设置文本
opEle.innerText = key
// 3 设置value
opEle.value = key // <option value="省">省</option>
// 4 将创建好的option标签添加到第一个select中
proEle.appendChild(opEle)
}
// 文本域变化事件 change事件
proEle.onchange = function () {
// 先获取到用户选择的省
let currentPro = proEle.value
// 获取对应的市信息
let currentCityList = data[currentPro]
// 清空市select中所有的option
cityEle.innerHTML = ''
// 自己加一个请选择
let ss = "<option disabled selected>请选择</option>"
// let oppEle = document.createElement('option')
// oppEle.innerText = '请选择'
// oppEle.setAttribute('selected','selected')
cityEle.innerHTML = ss
// for循环所有的市 渲染到第二个select中
for (let i = 0; i < currentCityList.length; i++) {
let currentCity = currentCityList[i]
// 1 创建option标签
let opEle = document.createElement('option')
// 2 设置文本
opEle.innerText = currentCity
// 3 设置value
opEle.value = currentCity // <option value="省">省</option>
// 4 将创建好的option标签添加到第一个select中
cityEle.appendChild(opEle)
}
}
</script>
</body>
jQuery
内部封装了原生的js代码,能够书写更少的代码完成js操作,还添加了一些功能
前端,模块不叫模块,叫类库
jQuery使用的时候也需要导入,但是文件非常小,基本不影响网络速度
jQuery版本:使用3版本
下载:用第一个,压缩之后的,内容更小
新建一个js文件
导入jQuery
<script src="jQuery-3.4.1"></script>
为了不让多个html都手动输入引入jQuery的语句代码,可以借助webstorm代码初始化功能,自动添加
也可以直接引入jQuery提供的cdn服务,基于网络直接请求加载
cdn:内容分发网络,用于加速访问。有收费也有免费:bootcdn,复制对应的script标签就行
jQuery基本语法
jQuery(选择器).action,也可以简写成 $(选择器).action
jQuery与原生代码对比
例,将p标签内部颜色改为红色
<p id='d1'>ppp</p>
<script>
//原生
let pEle = getElementById('d1');
pEle.style.color = 'red';
//jQuery
$('p').css('color','blue')
</script>
jQuery查找标签
-
基本选择器
$('#d1') //id选择器 $('#c1') //class选择器 $('div') //标签选择器 //得到的都是jQuery对象,通过取索引才能得到标签对象,jQuery对象只能使用jQuery方法,标签对象只能使用标签的方法 $('div')[0] //标签对象转jQuery对象:$括起来 $(document.getElementById('d1')) -
组合选择器
$('div.c1') //找类是c1的div标签 $('div#d1') //找id的d1的div标签 -
混合使用
$('.c1,.c2') //c1类和c2类 $('div span') //div的所有后代span $('div>span') //div的儿子span
基本筛选器
$('ul li:fist') //ul标签下的第一个li标签
$('ul li:last') //ul标签下的最后一个li标签
$('ul li:eq(2)') //eq对应索引,拿到li表中索引是2的li
$('ul li:even') //拿到偶数位的li,odd:奇数位的
$('ul li:gt(2)') //拿到索引大于2的所有元素
$('ul li:lt(2)') //拿到索引小于2的所有元素
//同html的特殊符号,大于小于
其他:has,not
$('ul li:not("#d1")') //移除满足条件的标签,不要id为d1的
$('div:has("p")') //内部含有p标签的div,选出包含一个或多个标签在内的标签
属性查找器
$('[username]') //查找所有包含username属性的标签
$('[type='text']') //拿到type类型为text的所有标签
$('input[type='text']') //所有type为text的input框
表单筛选器
只用于表单里
$(':text') //只适用于form表单里的标签,等价于上面第二个 $('input[type='text']')
/*一类的方法包括
:text
:password
:file
:checked等等*/
//checked会将checked和selected都拿到,而selected不会,所以在用checked的时候,自己加一个限制条件:input:checked
筛选器方法
next,nextAll,nextUntil,prev,prevAll,prevUntil,parent,
$('#d1').next() //jQuery对象的方法,拿到d1标签的下一个标签
$('#d1').nextAll() //拿到同级别下面所有的标签
$('#d1').nextUntil('.c1') //拿d1下面的标签,直到类为c1的标签
$('.c1').prev() //拿到c1类的上一个标签
//同样有All,Until
$('#d1').parents() //一层层拿,得到一个数组,一直拿到html
$('#d1').parentsUntil('body')
$('#d2').children() //拿到所有的子标签
$('#d1').siblings() //同级别上下所有
//找div下的p标签
$('div p')
//也可以
$('div').find('p')
//拿第一个标签,处理用冒号:first,也可以用.first()
$('div').find('p').first() //拿到div下的第一个p标签

浙公网安备 33010602011771号