1、事件
某些组件被执行了某些操作后,触发某些代码的执行
组件:html中的元素:,
,等
某些操作:对组件的动作:鼠标单击,鼠标双击等
某些代码:具有的功能代码:比如单击图片更换为另一张图片的功能代码
事件的绑定:
时间的绑定就是将html中的元素如何进行跟某一些操作(事件)进行连接起来
鼠标单击事件:onclick事件
元素的获取:
let 变量名 = document.getElementById(“id值”);
绑定事件:
直接绑定在html标签上: <body> <button id="btn" onclick="btn()">按钮</button> <script type="text/javascript"> function btn() { alert("按钮被点击!"); } </script></body>获取元素对象,使用匿名函数进行绑定:<body> <button id="btn">按钮</button> <script type="text/javascript"> document.getElementById("btn").onclick = function () { alert("按钮被点击!"); } </script></body>
2、BOM
Browser Object Model 浏览器对象模型,将浏览器的各个组成部分封装起来组成对象
window:窗口对象(也是前端对象的始对象,所以使用Window的方法时可省略)
window.alert(“普通弹框,带确定按钮”);
window.confirm(“可确定和取消弹框”);
window.prompt(“可输入弹框”);
Navigator:浏览器对象
Screen:显示器屏幕对象
History:历史记录对象
History.go():跳转到指定顺利的页面
History.back():返回上一页
History.forword():进入下一页
Location:地址栏对象
Location.href = “http://www.baidu.com":进入指定页
定时器:
setTimeout(函数/表达式,毫秒值):在指定的毫秒数后调用函数或者计算表达式,只执行一次,有返回值,用于取消定时器
clearTimeout():取消setTimeout()方法
setInterval(函数/表达式,毫秒值):按照指定的周期(毫秒值)来调用函数或这计算表达式
clearInterval():取消setInterval()方法
<body><div align="center"> <div id="time"></div> <button>暂停时间更新</button> <button>恢复时间更新</button></div><script type="text/javascript"> var date = new Date(); var s = date.toLocaleString(); //2021/6/3上午11:35:34 年月日时分秒 var s1 = date.toLocaleTimeString(); //上午11:35:34 时分秒 var s2 = date.toLocaleDateString(); //2021/6/3 年月日 console.log(s); setTimeout(getTime); var interval = setInterval(getTime,1000); //每一秒更新一次时间 function getTime(){ var timeText = document.getElementById("time"); timeText.innerHTML = new Date().toLocaleString() ; } var btn = document.getElementsByTagName("button")[0]; btn.onclick= function () { clearInterval(interval); } var btn1 = document.getElementsByTagName("button")[1]; btn1.onclick = function () { interval = setInterval(getTime,1000); }</script>
Location对象:
reload():重新加载当前文档,刷新
href:色湖之或者返回完整的URL
<body> <button>获取本页的URL</button> <button>刷新本页</button> <button>跳转至百度</button> <script> var btns = document.getElementsByTagName("button"); btns[0].onclick = function () { alert(location.href); } btns[1].onclick = function () { location.reload(); } btns[2].onclick = function () { location.href = "http://www.baidu.com"; } </script></body>
3、DOM
Document Object Model :文档对象模型
把所有页面标签抽象成为一个Document对象,我们可以使用js动态修改标签及属性内容
1、获取元素: ==es6之前获取方式== document.getElementById() 根据id属性值获取元素对象。id属性值一般唯一 document.getElementsByTagName() 根据元素名称获取元素对象们。返回值是一个数组 document.getElementsByClassName() 根据Class属性值获取元素对象们。返回值是一个数组 document.getElementsByName() 根据name属性值获取元素对象们。返回值是一个数组 ==es6获取方式== document.querySelector(id选择器) 根据id选择器,获取元素 document.querySelectorAll(css选择器) 根据css选择器获取元素,返回是一个数组2、操作内容: element.innerText 获取或者修改元素的纯文本内容 element.innerHTML 获取或者修改元素的html内容 element.outerHTML 获取或者修改包含自身的html内容总结: 1. innerText 获取的是纯文本 innerHTML获取的是所有html内容 2. innerText 设置到页面中的是纯文本 innerHTML设置到页面中的html会展示出外观效果 3. innerHTML不包含自身 outerHTML包含自身的html内容3、操作属性: setAttribute(属性名,属性值) 给元素设置自定义属性(了解) getAttribute(属性名) 获取元素的自定义属性值(了解) removeAttribute(属性名) 移除元素的自定义属性(了解)4、操作样式: 设置一个css样式 js对象.style.样式名 = '样式值'; 批量设置css样式 js对象.style.cssText='css样式字符串' 通过class设置样式【这个灵活性较大】 js对象.className='class选择器名'5、操作元素(标签) document.createElement(标签名称):创建一个标签对象 父标签对象.appendChild(子标签对象):给父标签添加一个子标签
4、正则表达式
方式一:let rege = new RegExp(”正则表达式”);
方式二:let rege = /正则表达式/;
相关方法:
正则对象.test(字符串):符合正则规则就返回true,否则false
字符串对象.match(正则对象):返回字符串那种符合正则规则的内容
单个字符: [a](字符a)[ab][a-zA-Z0-9_]元字符: \d:单个数字字符[0-9] \w:单个单词字符[a-zA-Z0-9_]量词: ?:表示出现0次或多次 *:表示出现0次或多此 +:出现一次或多次 {m,n}:表示最多有n个,最少有m个 如果m缺省:最多n次 如果n缺省:最少m次 {n}:正好n次开始符号:^结束符号:$手机号的正则表达式: regePhone = /^1[0-9]{10}$/邮箱的正则表达式: regeEmail = /^[a-zA-Z0-9]{6,}@[a-zA-Z0-9]{2,}\.(com|cn|edu)$/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<body> <input type="text" name = "phone"> <input type="text" name = "email"> <button id="btn">按钮</button> <script type="text/javascript"> var regePhone = /^1[0-9]{10}$/; var regeEmail = /^[a-zA-Z0-9]{6,}@[a-zA-Z0-9]{2,}\.(com|cn|edu) $/; document.getElementById("btn").onclick = function () { var phones = document.getElementsByTagName("input"); console.log(phones[0].value); if (regePhone.test(phones[0].value)){ alert("手机号合法!") }else{ alert("手机号不合法!") } } </script></body>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <body> <input type="text" name = "phone"> <input type="text" name = "email"> <button id="btn">按钮</button> <script type="text/javascript"> var regePhone = /^1[0-9]{10}$/; var regeEmail = /^[0-9a-zA-Z]{6,}@[0-9a-zA-Z]{2,}\.(com|cn|edu)$/; document.getElementById("btn").onclick = function () { var phones = document.getElementsByTagName("input"); console.log(phones[1].value); if (regeEmail.test(phones[1].value)){ alert("邮箱合法!") }else{ alert("邮箱不合法!") } } </script></body>
5、时间监听机制
某些组件被执行了某些操作后,触发某些代码的执行
事件:某些操作,如:单击,双击。键盘按下,鼠标移动
事件源:组件:如按钮,文本输入框
监听器:代码
注册监听:将事件,事件源,监听器结合在一起,当事件源发生了某个事件,则触发执行某个监听器代码
点击事件:
焦点事件:
加载事件:
鼠标事件:
onmousedown:鼠标按钮被按下
onmouseup:鼠标按键被松开
onmousemove:鼠标被移动
onmouseover:鼠标移到某个元素之上
onmouseout:鼠标从某个元素移开
键盘事件:
onkeydown:某个键盘按键被按下
onkeyup:某个键盘按键被松开
onokeypress:某个键盘按键被按下并松开
改变事件:
表单事件:
6、一些Demo
隔行换色:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><style> .ji{ background-color: #cccccc; } .ou{ background-color: aliceblue; } .over{ background-color: beige; }</style><!-- 隔行变色: 1. 表格奇偶行颜色不同 2. 鼠标移入颜色高亮--><body><table id="tab1" border="1" width="800" align="center" cellspacing="0" cellpadding="0"> <tr> <th width="100px"><input type="checkbox">全/<input type="checkbox">反选</th> <th>分类ID</th> <th>分类名称</th> <th>分类描述</th> <th>操作</th> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>1</td> <td>手机数码</td> <td>手机数码类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>2</td> <td>电脑办公</td> <td>电脑办公类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>3</td> <td>鞋靴箱包</td> <td>鞋靴箱包类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>4</td> <td>家居饰品</td> <td>家居饰品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>5</td> <td>牛奶制品</td> <td>牛奶制品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>6</td> <td>大豆制品</td> <td>大豆制品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>7</td> <td>海参制品</td> <td>海参制品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>8</td> <td>羊绒制品</td> <td>羊绒制品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>9</td> <td>海洋产品</td> <td>海洋产品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>10</td> <td>奢侈用品</td> <td>奢侈用品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr> <tr align="center"> <td><input type="checkbox" class="checkbox"></td> <td>4</td> <td>家居饰品</td> <td>家居饰品类商品</td> <td><a href="">修改</a>|<a href="">删除</a></td> </tr></table><script> //获取表格所有的行 var trs = document.getElementsByTagName("tr"); console.log(trs.length); for (var i= 0;i<trs.length;i++){ if (i % 2 == 0) { trs[i].className = "ji"; }else{ trs[i].className = "ou"; } } //多选 var inputs = document.getElementsByTagName("input"); //console.log(inputs[0].checked); inputs[0].onclick = function () { //绑定全选的点击事件 if (inputs[0].checked) { //若全选被点亮 for (var i = 2 ;i<inputs.length;i++) { inputs[i].checked = "true"; //则所有的都选上 trs[i-1].className = "over"; } } } inputs[1].onclick = function () { //绑定反选的点击事件 if (inputs[1].checked) { //若反选被点亮 inputs[0].checked = false; for (var i = 2 ;i<inputs.length;i++) { if (inputs[i].checked){ //则所有被选的都取消 inputs[i].checked = false; if (i % 2 == 0) { trs[i-1].className = "ji"; }else{ trs[i-1].className = "ou"; } }else{ inputs[i].checked = true; //所有没被选的都选中 trs[i-1].className = "over"; } } } }</script></body></html>
商品全选全不选:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>全选全不选</title></head><body><!--商品全选 1. 全选 点击全选按钮,所有复选框都被选中 2. 反选 点击反选按钮,所有复选框状态取反--><button id="btn1">1. 全选</button><button id="btn2">2. 反选</button><br/><input type="checkbox">电脑<input type="checkbox">手机<input type="checkbox">汽车<input type="checkbox">别墅<input type="checkbox" checked="checked">笔记本<script> var btns = document.getElementsByTagName("button"); var ipts = document.getElementsByTagName("input"); //全选 btns[0].onclick = function () { console.log(this); //遍历获取input for (var i = 0 ; i<ipts.length;i++){ //所有的input的checked属性值都为true ipts[i].checked = "true"; } } //反选 btns[1].onclick = function () { for (var i = 0 ; i<ipts.length;i++){ //遍历获取input的checked属性取反赋值 ipts[i].checked = !ipts[i].checked; } }</script></body></html>
省市联动:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>省市联动</title> <style type="text/css"> .regist_bg { width: 100%; height: 681px; padding-top: 40px; background-image: url(../img/logo_bg.jpg); } .regist { border: 7px inset #ccc; width: 600px; padding: 40px 0; padding-left: 80px; background-color: #fff; margin-left: 25%; border-radius: 10px; } input[type="submit"] { background-color: aliceblue; width: 100px; height: 35px; color: red; cursor: pointer; border-radius: 5px; } </style></head><body><div class="regist_bg"> <div class="regist"> <form action="#"> <table width="600" height="350px"> <tr> <td colspan="3"> <font color="#3164af">会员注册</font> USER REGISTER </td> </tr> <tr> <td align="right">用户名</td> <td colspan="2"><input id="loginnameId" type="text" name="loginname" size="60"/></td> </tr> <tr> <td align="right">密码</td> <td colspan="2"><input id="loginpwdId" type="password" name="loginpwd" size="60"/></td> </tr> <tr> <td align="right">确认密码</td> <td colspan="2"><input id="reloginpwdId" type="password" name="reloginpwd" size="60"/></td> </tr> <tr> <td align="right">Email</td> <td colspan="2"><input id="emailId" type="text" name="email" size="60"/></td> </tr> <tr> <td align="right">姓名</td> <td colspan="2"><input name="text" name="username" size="60"/></td> </tr> <tr> <td align="right">性别</td> <td colspan="2"> <input type="radio" name="gender" value="男" checked="checked"/>男 <input type="radio" name="gender" value="女"/>女 </td> </tr> <tr> <td align="right">电话号码</td> <td colspan="2"><input type="text" name="phone" size="60"/></td> </tr> <tr> <td align="right">所在地</td> <td colspan="3"> <select id="provinceId" style="width:150px"> <option value="">----请-选-择-省----</option> </select> <select id="cityId" style="width:150px"> <option value="">----请-选-择-市----</option> </select> </td> </tr> <tr> <td width="80" align="right">验证码</td> <td width="100"><input type="text" name="verifyCode"/></td> <td><img src="../img/checkMa.png"/></td> </tr> <tr> <td></td> <td colspan="2"> <input type="submit" value="注册"/> </td> </tr> </table> </form> </div></div><!--省市级联 1. 页面加载完成后自动装载省数据 2. 当选中省时,装载该省的市数据--><script> var arrsheng = ['河南省','河北省']; var citys = [['郑州市','开封市','周口市'],['廊坊市','石家庄市','衡水市']]; var province = document.getElementById('provinceId');//获取省的下拉框 var city = document.getElementById('cityId'); //获取市的下拉框 //1、页面加载时自动装载省数据 window.onload =function () { //循环省,填充省到下拉列表中 for (var i = 0; i < arrsheng.length; i++) { province.innerHTML += "<option value=''>"+arrsheng[i]+"</option>" } } //2、点击省时,装载该省的市数据 province.onclick =function () { //给省下拉框绑定点击事件 if (this.selectedIndex != 0) { //判断确定点击的不是下拉列表的第一个元素 city.length = 0; //清空市下拉框中的元素 city.innerHTML = "<option value=''>----请-选-择-市----</option>" //给市下拉框添加第一个元素 for (var j = 0; j < citys.length; j++) { //循环添加点击省的市内容到市下拉框 city.innerHTML += "<option value=''>"+citys[(this.selectedIndex-1)][j]+"</option>" } }else{ city.length = 0; //清空市下拉框中的元素 city.innerHTML = "<option value=''>----请-选-择-市----</option>" } }</script></body></html>
表单校验:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>表单校验</title><!-- 1. 两次密码输入一致 2. 邮箱格式正确 3. 手机号格式正确 4. 提交表单时校验表单项是否合法.--> <style type="text/css"> .regist_bg { width: 100%; height: 651px; padding-top: 70px; background-image: url(../img/logo_bg.jpg); margin: 0px; } .regist { border: 7px inset #ccc; width: 700px; padding: 40px 0; padding-left: 80px; background-color: #fff; margin-left: 25%; border-radius: 10px; } input[type="submit"] { background-color: aliceblue; width: 100px; height: 35px; color: red; cursor: pointer; border-radius: 5px; } .warn { color: red; font-size: 12px; display: none; } </style> <!-- 表单校验 1. 两次密码输入一致 2. 邮箱格式正确 3. 手机号格式正确 4. 提交表单时校验表单项是否合法. 总结: form表单的 onsubmit 事件 表单提交之前触发 --></head><body><div class="regist_bg"> <div class="regist"> <form action="#" id="myForm"> <table width="700px" height="350px"> <tr> <td colspan="3"> <font color="#3164af">会员注册</font> USER REGISTER </td> </tr> <tr> <td align="right">用户名</td> <td colspan="2"><input id="loginnameId" type="text" name="loginname" size="50"/> <span id="loginnamewarn" class="warn">用户名不能为空</span></td> </tr> <tr> <td align="right">密码</td> <td colspan="2"><input id="pwd1" type="password" name="pwd1" size="50"/></td> </tr> <tr> <td align="right">确认密码</td> <td colspan="2"><input id="pwd2" type="password" name="pwd2" size="50"/><span id="pwdwarn" class="warn">密码不一致</span></td> </tr> <tr> <td align="right">Email</td> <td colspan="2"><input id="email" type="text" name="email" size="50"/> <span id="emailwarn" class="warn">邮箱格式有误</span> </td> </tr> <tr> <td align="right">姓名</td> <td colspan="2"><input name="text" name="username" size="50"/></td> </tr> <tr> <td align="right">性别</td> <td colspan="2"> <input type="radio" name="gender" value="男" checked="checked"/>男 <input type="radio" name="gender" value="女"/>女 </td> </tr> <tr> <td align="right">电话号码</td> <td colspan="2"><input id="phone" type="text" name="phone" size="50"/> <span id="phonewarn" class="warn">手机格式有误</span> </td> </tr> <tr> <td align="right">所在地</td> <td colspan="3"> <select id="provinceId" onchange="selectCity(this.value)" style="width:150px"> <option value="">----请-选-择-省----</option> <option value="0">北京</option> <option value="1">辽宁</option> <option value="2">江苏</option> </select> <select id="cityId" style="width:150px"> <option>----请-选-择-市----</option> </select> </td> </tr> <tr> <td width="80" align="right">验证码</td> <td width="100"><input type="text" name="verifyCode"/></td> <td><img src="../img/checkMa.png"/></td> </tr> <tr> <td></td> <td colspan="2"> <input id="rebtn" type="submit" value="注册"/> </td> </tr> </table> </form> </div></div><script> //用户名输入框不能为空 //获取用户名输入框 var username = document.getElementById('loginnameId'); //若用户名输入框失去焦点,则调用函数查看是否为空 username.onblur = regeusername; function regeusername() { if(username.value == null || username.value == ""){ document.getElementById('loginnamewarn').style.display = "contents"; return false; }else{ document.getElementById('loginnamewarn').style.display = "none"; return true; } } // 1. 两次密码输入一致 //获取密码输入框内容,进行判断 var pwd1 = document.getElementById('pwd1'); var pwd2 = document.getElementById('pwd2'); //重复密码输入框失去焦点时调用函数 pwd2.onblur = regepwd; function regepwd() { if (pwd1.value != pwd2.value) { document.getElementById('pwdwarn').style.display = "contents"; }else{ document.getElementById('pwdwarn').style.display = "none"; } return pwd1.value == pwd2.value; } // 2. 邮箱格式正确 //获取邮箱框内容,进行判断 var email = document.getElementById('email'); //邮箱输入框失去焦点时调用函数 email.onblur = regeemail; function regeemail() { //邮箱验证正则表达式 var regeEmail = /^[0-9a-zA-Z]{6,}@[0-9a-zA-Z]{2,}\.(com|cn|edu)$/; if (!regeEmail.test(this.value)){ document.getElementById('emailwarn').style.display = "contents"; }else{ document.getElementById('emailwarn').style.display = "none"; } return regeEmail.test(this.value); } // 3. 手机号格式正确 //获取手机号输入框内容,进行判断 var phone = document.getElementById('phone'); //手机号输入框失去焦点时调用函数 phone.onblur = regephone; function regephone() { //手机号验证正则表达式 var regePhone = /^1[0-9]{10}$/; if (!regePhone.test(this.value)){ document.getElementById('phonewarn').style.display = "contents"; }else{ document.getElementById('phonewarn').style.display = "none"; } return regePhone.test(this.value); } // 4. 提交表单时校验表单项是否合法. document.getElementById('myForm').onsubmit = function () { return regeemail()&®ephone()&®epwd()&®eusername(); //都为true,即提交成功 }</script></body></html>
伪轮播图:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>伪轮播图</title> <style> /*大盒子*/ .container{ width:100%; height: 600px; background: darkkhaki; } /*装图片的盒子*/ .wrap{ position:relative; width: 900px; height: 300px; background: red; margin-left: 300px; } /*图片*/ img{ position: absolute; width: 100%; height: 100%; } /*按钮*/ .btn{ margin-top: 10px; height: 30px; width: 60px; } #goup{ float: left; margin-left: 600px; } #gonext{ float: right; margin-right: 600px; } </style></head><body><div class="container"> <div class="wrap"> <img src="../img/desc_banner1.jpg" alt="" title="" id="imgx"> </div> <button class="btn" id="goup">上一张</button> <button class="btn" id="gonext">下一张</button> <script> var imgs = ['../img/desc_banner1.jpg','../img/desc_banner2.jpg','../img/desc_banner3.jpg'] var index = 0; var img = document.getElementById('imgx'); var goUp = document.getElementById('goup'); goUp.onclick =goup; function goup() { if (0<=index&&index<imgs.length) { img.src = imgs[index--]; }else{ index = (imgs.length-1); goup(); } } var goNext = document.getElementById('gonext'); goNext.onclick =gonext; function gonext() { if (index<imgs.length) { img.src = imgs[index++]; }else{ index = 0; gonext(); } } var setInterval =setInterval(gonext,5000); img.onfocus = function () { clearInterval(setInterval); } </script></div></body></html>
某些操作:对组件的动作:鼠标单击,鼠标双击等
某些代码:具有的功能代码:比如单击图片更换为另一张图片的功能代码
事件的绑定:
时间的绑定就是将html中的元素如何进行跟某一些操作(事件)进行连接起来
鼠标单击事件:onclick事件
元素的获取:
let 变量名 = document.getElementById(“id值”);
绑定事件:
直接绑定在html标签上:<body><button id="btn" onclick="btn()">按钮</button><script type="text/javascript">function btn() {alert("按钮被点击!");}</script></body>获取元素对象,使用匿名函数进行绑定:<body><button id="btn">按钮</button><script type="text/javascript">document.getElementById("btn").onclick = function () {alert("按钮被点击!");}</script></body>
2、BOM
Browser Object Model 浏览器对象模型,将浏览器的各个组成部分封装起来组成对象
window:窗口对象(也是前端对象的始对象,所以使用Window的方法时可省略)
window.alert(“普通弹框,带确定按钮”);
window.confirm(“可确定和取消弹框”);
window.prompt(“可输入弹框”);
Navigator:浏览器对象
Screen:显示器屏幕对象
History:历史记录对象
History.go():跳转到指定顺利的页面
History.back():返回上一页
History.forword():进入下一页
Location:地址栏对象
Location.href = “http://www.baidu.com":进入指定页
定时器:
setTimeout(函数/表达式,毫秒值):在指定的毫秒数后调用函数或者计算表达式,只执行一次,有返回值,用于取消定时器
clearTimeout():取消setTimeout()方法
setInterval(函数/表达式,毫秒值):按照指定的周期(毫秒值)来调用函数或这计算表达式
clearInterval():取消setInterval()方法
<body><div align="center"><div id="time"></div><button>暂停时间更新</button><button>恢复时间更新</button></div><script type="text/javascript">var date = new Date();var s = date.toLocaleString(); //2021/6/3上午11:35:34 年月日时分秒var s1 = date.toLocaleTimeString(); //上午11:35:34 时分秒var s2 = date.toLocaleDateString(); //2021/6/3 年月日console.log(s);setTimeout(getTime);var interval = setInterval(getTime,1000); //每一秒更新一次时间function getTime(){var timeText = document.getElementById("time");timeText.innerHTML = new Date().toLocaleString() ;}var btn = document.getElementsByTagName("button")[0];btn.onclick= function () {clearInterval(interval);}var btn1 = document.getElementsByTagName("button")[1];btn1.onclick = function () {interval = setInterval(getTime,1000);}</script>
Location对象:
reload():重新加载当前文档,刷新
href:色湖之或者返回完整的URL
<body><button>获取本页的URL</button><button>刷新本页</button><button>跳转至百度</button><script>var btns = document.getElementsByTagName("button");btns[0].onclick = function () {alert(location.href);}btns[1].onclick = function () {location.reload();}btns[2].onclick = function () {location.href = "http://www.baidu.com";}</script></body>
3、DOM
Document Object Model :文档对象模型
把所有页面标签抽象成为一个Document对象,我们可以使用js动态修改标签及属性内容
1、获取元素:==es6之前获取方式==document.getElementById() 根据id属性值获取元素对象。id属性值一般唯一document.getElementsByTagName() 根据元素名称获取元素对象们。返回值是一个数组document.getElementsByClassName() 根据Class属性值获取元素对象们。返回值是一个数组document.getElementsByName() 根据name属性值获取元素对象们。返回值是一个数组==es6获取方式==document.querySelector(id选择器) 根据id选择器,获取元素document.querySelectorAll(css选择器) 根据css选择器获取元素,返回是一个数组2、操作内容:element.innerText 获取或者修改元素的纯文本内容element.innerHTML 获取或者修改元素的html内容element.outerHTML 获取或者修改包含自身的html内容总结:1. innerText 获取的是纯文本 innerHTML获取的是所有html内容2. innerText 设置到页面中的是纯文本 innerHTML设置到页面中的html会展示出外观效果3. innerHTML不包含自身 outerHTML包含自身的html内容3、操作属性:setAttribute(属性名,属性值) 给元素设置自定义属性(了解)getAttribute(属性名) 获取元素的自定义属性值(了解)removeAttribute(属性名) 移除元素的自定义属性(了解)4、操作样式:设置一个css样式js对象.style.样式名 = '样式值';批量设置css样式js对象.style.cssText='css样式字符串'通过class设置样式【这个灵活性较大】js对象.className='class选择器名'5、操作元素(标签)document.createElement(标签名称):创建一个标签对象父标签对象.appendChild(子标签对象):给父标签添加一个子标签
4、正则表达式
方式一:let rege = new RegExp(”正则表达式”);
方式二:let rege = /正则表达式/;
相关方法:
正则对象.test(字符串):符合正则规则就返回true,否则false
字符串对象.match(正则对象):返回字符串那种符合正则规则的内容
单个字符:[a](字符a)[ab][a-zA-Z0-9_]元字符:\d:单个数字字符[0-9]\w:单个单词字符[a-zA-Z0-9_]量词:?:表示出现0次或多次*:表示出现0次或多此+:出现一次或多次{m,n}:表示最多有n个,最少有m个如果m缺省:最多n次如果n缺省:最少m次{n}:正好n次开始符号:^结束符号:$手机号的正则表达式:regePhone = /^1[0-9]{10}$/邮箱的正则表达式:regeEmail = /^[a-zA-Z0-9]{6,}@[a-zA-Z0-9]{2,}\.(com|cn|edu)$/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<body><input type="text" name = "phone"><input type="text" name = "email"><button id="btn">按钮</button><script type="text/javascript">var regePhone = /^1[0-9]{10}$/;var regeEmail = /^[a-zA-Z0-9]{6,}@[a-zA-Z0-9]{2,}\.(com|cn|edu) $/;document.getElementById("btn").onclick = function () {var phones = document.getElementsByTagName("input");console.log(phones[0].value);if (regePhone.test(phones[0].value)){alert("手机号合法!")}else{alert("手机号不合法!")}}</script></body>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<body><input type="text" name = "phone"><input type="text" name = "email"><button id="btn">按钮</button><script type="text/javascript">var regePhone = /^1[0-9]{10}$/;var regeEmail = /^[0-9a-zA-Z]{6,}@[0-9a-zA-Z]{2,}\.(com|cn|edu)$/;document.getElementById("btn").onclick = function () {var phones = document.getElementsByTagName("input");console.log(phones[1].value);if (regeEmail.test(phones[1].value)){alert("邮箱合法!")}else{alert("邮箱不合法!")}}</script></body>
5、时间监听机制
某些组件被执行了某些操作后,触发某些代码的执行
事件:某些操作,如:单击,双击。键盘按下,鼠标移动
事件源:组件:如按钮,文本输入框
监听器:代码
注册监听:将事件,事件源,监听器结合在一起,当事件源发生了某个事件,则触发执行某个监听器代码
点击事件:
焦点事件:
加载事件:
鼠标事件:
onmousedown:鼠标按钮被按下
onmouseup:鼠标按键被松开
onmousemove:鼠标被移动
onmouseover:鼠标移到某个元素之上
onmouseout:鼠标从某个元素移开
键盘事件:
onkeydown:某个键盘按键被按下
onkeyup:某个键盘按键被松开
onokeypress:某个键盘按键被按下并松开
改变事件:
表单事件:
6、一些Demo
隔行换色:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><style>.ji{background-color: #cccccc;}.ou{background-color: aliceblue;}.over{background-color: beige;}</style><!--隔行变色:1. 表格奇偶行颜色不同2. 鼠标移入颜色高亮--><body><table id="tab1" border="1" width="800" align="center" cellspacing="0" cellpadding="0"><tr><th width="100px"><input type="checkbox">全/<input type="checkbox">反选</th><th>分类ID</th><th>分类名称</th><th>分类描述</th><th>操作</th></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>1</td><td>手机数码</td><td>手机数码类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>2</td><td>电脑办公</td><td>电脑办公类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>3</td><td>鞋靴箱包</td><td>鞋靴箱包类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>4</td><td>家居饰品</td><td>家居饰品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>5</td><td>牛奶制品</td><td>牛奶制品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>6</td><td>大豆制品</td><td>大豆制品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>7</td><td>海参制品</td><td>海参制品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>8</td><td>羊绒制品</td><td>羊绒制品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>9</td><td>海洋产品</td><td>海洋产品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>10</td><td>奢侈用品</td><td>奢侈用品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr><tr align="center"><td><input type="checkbox" class="checkbox"></td><td>4</td><td>家居饰品</td><td>家居饰品类商品</td><td><a href="">修改</a>|<a href="">删除</a></td></tr></table><script>//获取表格所有的行var trs = document.getElementsByTagName("tr");console.log(trs.length);for (var i= 0;i<trs.length;i++){if (i % 2 == 0) {trs[i].className = "ji";}else{trs[i].className = "ou";}}//多选var inputs = document.getElementsByTagName("input");//console.log(inputs[0].checked);inputs[0].onclick = function () { //绑定全选的点击事件if (inputs[0].checked) { //若全选被点亮for (var i = 2 ;i<inputs.length;i++) {inputs[i].checked = "true"; //则所有的都选上trs[i-1].className = "over";}}}inputs[1].onclick = function () { //绑定反选的点击事件if (inputs[1].checked) { //若反选被点亮inputs[0].checked = false;for (var i = 2 ;i<inputs.length;i++) {if (inputs[i].checked){ //则所有被选的都取消inputs[i].checked = false;if (i % 2 == 0) {trs[i-1].className = "ji";}else{trs[i-1].className = "ou";}}else{inputs[i].checked = true; //所有没被选的都选中trs[i-1].className = "over";}}}}</script></body></html>
商品全选全不选:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>全选全不选</title></head><body><!--商品全选1. 全选 点击全选按钮,所有复选框都被选中2. 反选 点击反选按钮,所有复选框状态取反--><button id="btn1">1. 全选</button><button id="btn2">2. 反选</button><br/><input type="checkbox">电脑<input type="checkbox">手机<input type="checkbox">汽车<input type="checkbox">别墅<input type="checkbox" checked="checked">笔记本<script>var btns = document.getElementsByTagName("button");var ipts = document.getElementsByTagName("input");//全选btns[0].onclick = function () {console.log(this);//遍历获取inputfor (var i = 0 ; i<ipts.length;i++){//所有的input的checked属性值都为trueipts[i].checked = "true";}}//反选btns[1].onclick = function () {for (var i = 0 ; i<ipts.length;i++){//遍历获取input的checked属性取反赋值ipts[i].checked = !ipts[i].checked;}}</script></body></html>
省市联动:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>省市联动</title><style type="text/css">.regist_bg {width: 100%;height: 681px;padding-top: 40px;background-image: url(../img/logo_bg.jpg);}.regist {border: 7px inset #ccc;width: 600px;padding: 40px 0;padding-left: 80px;background-color: #fff;margin-left: 25%;border-radius: 10px;}input[type="submit"] {background-color: aliceblue;width: 100px;height: 35px;color: red;cursor: pointer;border-radius: 5px;}</style></head><body><div class="regist_bg"><div class="regist"><form action="#"><table width="600" height="350px"><tr><td colspan="3"><font color="#3164af">会员注册</font> USER REGISTER</td></tr><tr><td align="right">用户名</td><td colspan="2"><input id="loginnameId" type="text" name="loginname" size="60"/></td></tr><tr><td align="right">密码</td><td colspan="2"><input id="loginpwdId" type="password" name="loginpwd" size="60"/></td></tr><tr><td align="right">确认密码</td><td colspan="2"><input id="reloginpwdId" type="password" name="reloginpwd" size="60"/></td></tr><tr><td align="right">Email</td><td colspan="2"><input id="emailId" type="text" name="email" size="60"/></td></tr><tr><td align="right">姓名</td><td colspan="2"><input name="text" name="username" size="60"/></td></tr><tr><td align="right">性别</td><td colspan="2"><input type="radio" name="gender" value="男" checked="checked"/>男<input type="radio" name="gender" value="女"/>女</td></tr><tr><td align="right">电话号码</td><td colspan="2"><input type="text" name="phone" size="60"/></td></tr><tr><td align="right">所在地</td><td colspan="3"><select id="provinceId" style="width:150px"><option value="">----请-选-择-省----</option></select><select id="cityId" style="width:150px"><option value="">----请-选-择-市----</option></select></td></tr><tr><td width="80" align="right">验证码</td><td width="100"><input type="text" name="verifyCode"/></td><td><img src="../img/checkMa.png"/></td></tr><tr><td></td><td colspan="2"><input type="submit" value="注册"/></td></tr></table></form></div></div><!--省市级联1. 页面加载完成后自动装载省数据2. 当选中省时,装载该省的市数据--><script>var arrsheng = ['河南省','河北省'];var citys = [['郑州市','开封市','周口市'],['廊坊市','石家庄市','衡水市']];var province = document.getElementById('provinceId');//获取省的下拉框var city = document.getElementById('cityId'); //获取市的下拉框//1、页面加载时自动装载省数据window.onload =function () {//循环省,填充省到下拉列表中for (var i = 0; i < arrsheng.length; i++) {province.innerHTML += "<option value=''>"+arrsheng[i]+"</option>"}}//2、点击省时,装载该省的市数据province.onclick =function () { //给省下拉框绑定点击事件if (this.selectedIndex != 0) { //判断确定点击的不是下拉列表的第一个元素city.length = 0; //清空市下拉框中的元素city.innerHTML = "<option value=''>----请-选-择-市----</option>" //给市下拉框添加第一个元素for (var j = 0; j < citys.length; j++) { //循环添加点击省的市内容到市下拉框city.innerHTML += "<option value=''>"+citys[(this.selectedIndex-1)][j]+"</option>"}}else{city.length = 0; //清空市下拉框中的元素city.innerHTML = "<option value=''>----请-选-择-市----</option>"}}</script></body></html>
表单校验:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>表单校验</title><!--1. 两次密码输入一致2. 邮箱格式正确3. 手机号格式正确4. 提交表单时校验表单项是否合法.--><style type="text/css">.regist_bg {width: 100%;height: 651px;padding-top: 70px;background-image: url(../img/logo_bg.jpg);margin: 0px;}.regist {border: 7px inset #ccc;width: 700px;padding: 40px 0;padding-left: 80px;background-color: #fff;margin-left: 25%;border-radius: 10px;}input[type="submit"] {background-color: aliceblue;width: 100px;height: 35px;color: red;cursor: pointer;border-radius: 5px;}.warn {color: red;font-size: 12px;display: none;}</style><!--表单校验1. 两次密码输入一致2. 邮箱格式正确3. 手机号格式正确4. 提交表单时校验表单项是否合法.总结:form表单的 onsubmit 事件 表单提交之前触发--></head><body><div class="regist_bg"><div class="regist"><form action="#" id="myForm"><table width="700px" height="350px"><tr><td colspan="3"><font color="#3164af">会员注册</font> USER REGISTER</td></tr><tr><td align="right">用户名</td><td colspan="2"><input id="loginnameId" type="text" name="loginname" size="50"/><span id="loginnamewarn" class="warn">用户名不能为空</span></td></tr><tr><td align="right">密码</td><td colspan="2"><input id="pwd1" type="password" name="pwd1" size="50"/></td></tr><tr><td align="right">确认密码</td><td colspan="2"><input id="pwd2" type="password" name="pwd2" size="50"/><spanid="pwdwarn" class="warn">密码不一致</span></td></tr><tr><td align="right">Email</td><td colspan="2"><input id="email" type="text" name="email" size="50"/><span id="emailwarn" class="warn">邮箱格式有误</span></td></tr><tr><td align="right">姓名</td><td colspan="2"><input name="text" name="username" size="50"/></td></tr><tr><td align="right">性别</td><td colspan="2"><input type="radio" name="gender" value="男" checked="checked"/>男<input type="radio" name="gender" value="女"/>女</td></tr><tr><td align="right">电话号码</td><td colspan="2"><input id="phone" type="text" name="phone" size="50"/><span id="phonewarn" class="warn">手机格式有误</span></td></tr><tr><td align="right">所在地</td><td colspan="3"><select id="provinceId" onchange="selectCity(this.value)" style="width:150px"><option value="">----请-选-择-省----</option><option value="0">北京</option><option value="1">辽宁</option><option value="2">江苏</option></select><select id="cityId" style="width:150px"><option>----请-选-择-市----</option></select></td></tr><tr><td width="80" align="right">验证码</td><td width="100"><input type="text" name="verifyCode"/></td><td><img src="../img/checkMa.png"/></td></tr><tr><td></td><td colspan="2"><input id="rebtn" type="submit" value="注册"/></td></tr></table></form></div></div><script>//用户名输入框不能为空//获取用户名输入框var username = document.getElementById('loginnameId');//若用户名输入框失去焦点,则调用函数查看是否为空username.onblur = regeusername;function regeusername() {if(username.value == null || username.value == ""){document.getElementById('loginnamewarn').style.display = "contents";return false;}else{document.getElementById('loginnamewarn').style.display = "none";return true;}}// 1. 两次密码输入一致//获取密码输入框内容,进行判断var pwd1 = document.getElementById('pwd1');var pwd2 = document.getElementById('pwd2');//重复密码输入框失去焦点时调用函数pwd2.onblur = regepwd;function regepwd() {if (pwd1.value != pwd2.value) {document.getElementById('pwdwarn').style.display = "contents";}else{document.getElementById('pwdwarn').style.display = "none";}return pwd1.value == pwd2.value;}// 2. 邮箱格式正确//获取邮箱框内容,进行判断var email = document.getElementById('email');//邮箱输入框失去焦点时调用函数email.onblur = regeemail;function regeemail() {//邮箱验证正则表达式var regeEmail = /^[0-9a-zA-Z]{6,}@[0-9a-zA-Z]{2,}\.(com|cn|edu)$/;if (!regeEmail.test(this.value)){document.getElementById('emailwarn').style.display = "contents";}else{document.getElementById('emailwarn').style.display = "none";}return regeEmail.test(this.value);}// 3. 手机号格式正确//获取手机号输入框内容,进行判断var phone = document.getElementById('phone');//手机号输入框失去焦点时调用函数phone.onblur = regephone;function regephone() {//手机号验证正则表达式var regePhone = /^1[0-9]{10}$/;if (!regePhone.test(this.value)){document.getElementById('phonewarn').style.display = "contents";}else{document.getElementById('phonewarn').style.display = "none";}return regePhone.test(this.value);}// 4. 提交表单时校验表单项是否合法.document.getElementById('myForm').onsubmit = function () {return regeemail()&®ephone()&®epwd()&®eusername(); //都为true,即提交成功}</script></body></html>
伪轮播图:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>伪轮播图</title><style>/*大盒子*/.container{width:100%;height: 600px;background: darkkhaki;}/*装图片的盒子*/.wrap{position:relative;width: 900px;height: 300px;background: red;margin-left: 300px;}/*图片*/img{position: absolute;width: 100%;height: 100%;}/*按钮*/.btn{margin-top: 10px;height: 30px;width: 60px;}#goup{float: left;margin-left: 600px;}#gonext{float: right;margin-right: 600px;}</style></head><body><div class="container"><div class="wrap"><img src="../img/desc_banner1.jpg" alt="" title="" id="imgx"></div><button class="btn" id="goup">上一张</button><button class="btn" id="gonext">下一张</button><script>var imgs = ['../img/desc_banner1.jpg','../img/desc_banner2.jpg','../img/desc_banner3.jpg']var index = 0;var img = document.getElementById('imgx');var goUp = document.getElementById('goup');goUp.onclick =goup;function goup() {if (0<=index&&index<imgs.length) {img.src = imgs[index--];}else{index = (imgs.length-1);goup();}}var goNext = document.getElementById('gonext');goNext.onclick =gonext;function gonext() {if (index<imgs.length) {img.src = imgs[index++];}else{index = 0;gonext();}}var setInterval =setInterval(gonext,5000);img.onfocus = function () {clearInterval(setInterval);}</script></div></body></html>
