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);
//遍历获取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>