一 js案例
<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 () { // 绑定点击事件 // 动态的修改div标签的类属性 divEle.classList.toggle(‘bg_red‘) } </script> 开关灯案例
<input type="text" value="老板 去吗?" id="d1"> <script> let iEle = document.getElementById(‘d1‘) // 获取焦点事件 iEle.onfocus = function () { // 将input框内部值去除 iEle.value = ‘‘ // 点value就是获取 等号赋值就是设置 } // 失去焦点事件 iEle.onblur = function () { // 给input标签重写赋值 iEle.value = ‘没钱 不去!‘ } </script> input框获取焦点失去焦点案例
<input type="text" id="d1" style="display: block;height: 50px;width: 200px"> <button id="d2">开始</button> <button id="d3">结束</button> <script> // 先定义一个全局存储定时器的变量 let t = null let inputEle = document.getElementById(‘d1‘) let startBtnEle = document.getElementById(‘d2‘) let endBtnEle = document.getElementById(‘d3‘) // 1 访问页面之后 将访问的时间展示到input框中 // 2 动态展示当前时间 // 3 页面上加两个按钮 一个开始 一个结束 function showTime() { let currentTime = new Date(); inputEle.value = currentTime.toLocaleString() } startBtnEle.onclick = function () { // 限制定时器只能开一个 if(!t){ t = setInterval(showTime,1000) // 每点击一次就会开设一个定时器 而t只指代最后一个 } } endBtnEle.onclick = function () { clearInterval(t) // 还应该将t重置为空 t = null } </script> 实时展示当前时间
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <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> </html> 省市联动
二 jQuery
jQuery内部封装了原生的js代码(还额外添加了很多的功能),能够让你通过书写更少的代码 完成js操作, 类似于python里面的模块 在前端模块不叫模块 叫 “类库”
兼容多个浏览器的 你在使用jQuery的时候就不需要考虑浏览器兼容问题
jQuery的宗旨让你用更少的代码完成更多的事情
1 文件下载到了本地 如何解决多个文件反复书写引入语句的代码 可以借助于pycharm自动初始化代码功能完成自动添加 配置 编辑 file and code template """我不想下载jQuery文件 能不能使用呢?""" 2 直接引入jQuery提供的CDN服务(基于网络直接请求加载) CDN:内容分发网络 CDN有免费的也有收费的 前端免费的cdn网站: bootcdn <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script> """你的计算机必须要有网络""" 文件导入
2.1 jQuery的基本语法
jQuery(选择器).action()
秉持着jQuery的宗旨 jQuery简写 $jQuery() === $()
2.2 js和jQuery对比
将p标签内部的文本颜色改为红色 // 原生js代码操作标签 let pEle = document.getElementById(‘d1‘) pEle.style.color = ‘red‘ // jQuery操作标签 $(‘p‘).css(‘color‘,‘blue‘)
三如何查找标签
3.1基本选择器
id选择器 $(‘#d1‘) w.fn.init [div#d1]0: div#d1length: 1__proto__: Object(0) class选择器 $(‘.c1‘) w.fn.init [p.c1, prevObject: w.fn.init(1)]0: p.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0) 标签选择器 $(‘span‘) w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)]
3.2 对象之间的转换
jQuery对象如何变成标签对象 $(‘#d1‘)[0] <div id=?"d1">?…?</div>? document.getElementById(‘d1‘)获取的是标签对象 <div id=?"d1">?…?</div>? 标签对象如何转jQuery对象 $(document.getElementById(‘d1‘)) w.fn.init [div#d1]
3.3 组合选择器/分组与嵌套
$(‘div‘) w.fn.init(2) [div#d1, div.c1, prevObject: w.fn.init(1)] $(‘div.c1‘) w.fn.init [div.c1, prevObject: w.fn.init(1)]0: div.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0) $(‘div#d1‘) w.fn.init [div#d1, prevObject: w.fn.init(1)] $(‘*‘) w.fn.init(19) [html, head, meta, title, meta, link, script, script, body, span, span, div#d1, span, p#d2, span, span, div.c1, span, span, prevObject: w.fn.init(1)] 并列+混用 $(‘#d1,.c1,p‘) w.fn.init(3) [div#d1, p#d2, div.c1, prevObject: w.fn.init(1)] 后代 $(‘div span‘) w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)] 儿子 $(‘div>span‘) w.fn.init(2) [span, span, prevObject: w.fn.init(1)] 毗邻 $(‘div+span‘) w.fn.init [span, prevObject: w.fn.init(1)] 弟弟 $(‘div~span‘) w.fn.init(2) [span, span, prevObject: w.fn.init(1)]
3.4 基本筛选器
$(‘ul li‘) w.fn.init(10) [li, li, li, li, li, li, li.c1, li, li#d1, li, prevObject: w.fn.init(1)] 大儿子 $(‘ul li:first‘) w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0) 小儿子 $(‘ul li:last‘) w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0) 放索引 $(‘ul li:eq(2)‘) w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0) 偶数索引 0包含在内 $(‘ul li:even‘) w.fn.init(5) [li, li, li, li.c1, li#d1, prevObject: w.fn.init(1)]0: li1: li2: li3: li.c14: li#d1length: 5prevObject: w.fn.init [document]__proto__: Object(0) 奇数索引 $(‘ul li:odd‘) w.fn.init(5) [li, li, li, li, li, prevObject: w.fn.init(1)]0: li1: li2: li3: li4: lilength: 5prevObject: w.fn.init [document]__proto__: Object(0) 大于索引 $(‘ul li:gt(2)‘) w.fn.init(7) [li, li, li, li.c1, li, li#d1, li, prevObject: w.fn.init(1)]0: li1: li2: li3: li.c14: li5: li#d16: lilength: 7prevObject: w.fn.init [document]__proto__: Object(0) 小于索引 $(‘ul li:lt(2)‘) w.fn.init(2) [li, li, prevObject: w.fn.init(1)]0: li1: lilength: 2prevObject: w.fn.init [document]__proto__: Object(0) 移除满足条件的标签 $(‘ul li:not("#d1")‘) w.fn.init(9) [li, li, li, li, li, li, li.c1, li, li, prevObject: w.fn.init(1)] 选取出包含一个或多个标签在内的标签 $(‘div:has("p")‘) w.fn.init [div, prevObject: w.fn.init(1)]
3.5 属性选择器
$(‘[username]‘) w.fn.init(3) [input, input, p, prevObject: w.fn.init(1)] $(‘[username="jason"]‘) w.fn.init [input, prevObject: w.fn.init(1)] $(‘p[username="egon"]‘) w.fn.init [p, prevObject: w.fn.init(1)] $(‘[type]‘) w.fn.init(2) [input, input, prevObject: w.fn.init(1)] $(‘[type="text"]‘) w.fn.init(2) [input, input, prevObject: w.fn.init(1)]
3.6表单筛选器
$(‘input[type="text"]‘) w.fn.init [input, prevObject: w.fn.init(1)]0: inputlength: 1prevObject: w.fn.init [document]__proto__: Object(0) $(‘input[type="password"]‘) w.fn.init [input, prevObject: w.fn.init(1)] $(‘:text‘) # 等价于上面第一个 w.fn.init [input, prevObject: w.fn.init(1)]0: inputlength: 1prevObject: w.fn.init [document]__proto__: Object(0) $(‘:password‘) # 等价于上面第二个 w.fn.init [input, prevObject: w.fn.init(1)] :text :password :file :radio :checkbox :submit :reset :button ... 表单对象属性 :enabled :disabled :checked :selected """特殊情况""" $(‘:checked‘) # 它会将checked和selected都拿到 w.fn.init(2) [input, option, prevObject: w.fn.init(1)]0: input1: optionlength: 2prevObject: w.fn.init [document]__proto__: Object(0) $(‘:selected‘) # 它不会 只拿selected w.fn.init [option, prevObject: w.fn.init(1)] $(‘input:checked‘) # 自己加一个限制条件 w.fn.init [input, prevObject: w.fn.init(1)]
3.6 筛选器方法
$(‘#d1‘).next() # 同级别下一个 w.fn.init [span, prevObject: w.fn.init(1)]0: spanlength: 1prevObject: w.fn.init [span#d1]__proto__: Object(0) $(‘#d1‘).nextAll() w.fn.init(5) [span, div#d2, span, span, span.c1, prevObject: w.fn.init(1)]0: span1: div#d22: span3: span4: span.c1length: 5prevObject: w.fn.init [span#d1]__proto__: Object(0) 查找跟随 <div clas=‘d1’> 的同胞元素,直到下一个id为c1的元素为止 $(‘#d1‘).nextUntil(‘.c1‘) w.fn.init(4) [span, div#d2, span, span, prevObject: w.fn.init(1)]0: span1: div#d22: span3: spanlength: 4prevObject: w.fn.init [span#d1]__proto__: Object(0) $(‘.c1‘).prev() # 上一个 w.fn.init [span, prevObject: w.fn.init(1)]0: spanlength: 1prevObject: w.fn.init [span.c1, prevObject: w.fn.init(1)]__proto__: Object(0) $(‘.c1‘).prevAll() w.fn.init(5) [span, span, div#d2, span, span#d1, prevObject: w.fn.init(1)] $(‘.c1‘).prevUntil(‘#d2‘) w.fn.init(2) [span, span, prevObject: w.fn.init(1)] 第一级父标签 $(‘#d3‘).parent() w.fn.init [p, prevObject: w.fn.init(1)]0: plength: 1prevObject: w.fn.init [span#d3]__proto__: Object(0) $(‘#d3‘).parent().parent() w.fn.init [div#d2, prevObject: w.fn.init(1)] $(‘#d3‘).parent().parent().parent() w.fn.init [body, prevObject: w.fn.init(1)] $(‘#d3‘).parent().parent().parent().parent() w.fn.init [html, prevObject: w.fn.init(1)] $(‘#d3‘).parent().parent().parent().parent().parent() w.fn.init [document, prevObject: w.fn.init(1)] $(‘#d3‘).parent().parent().parent().parent().parent().parent() w.fn.init [prevObject: w.fn.init(1)] $(‘#d3‘).parents() w.fn.init(4) [p, div#d2, body, html, prevObject: w.fn.init(1)] $(‘#d3‘).parentsUntil(‘body‘) w.fn.init(2) [p, div#d2, prevObject: w.fn.init(1)] $(‘#d2‘).children() # 儿子 $(‘#d2‘).siblings() # 同级别上下所有 $(‘div p‘) 等价 find从某个区域内筛选出想要的标签 $(‘div‘).find(‘p‘) """下述两两等价""" $(‘div span:first‘) w.fn.init [span, prevObject: w.fn.init(1)] $(‘div span‘).first() w.fn.init [span, prevObject: w.fn.init(3)]0: spanlength: 1prevObject: w.fn.init(3) [span, span#d3, span, prevObject: w.fn.init(1)]__proto__: Object(0) $(‘div span:last‘) w.fn.init [span, prevObject: w.fn.init(1)] $(‘div span‘).last() w.fn.init [span, prevObject: w.fn.init(3)] $(‘div span:not("#d3")‘) w.fn.init(2) [span, span, prevObject: w.fn.init(1)] $(‘div span‘).not(‘#d3‘) w.fn.init(2) [span, span, prevObject: w.fn.init(3)]