pip install flask
# 安装flask框架
from flask import Flask # 导入Flask类
app = Flask(__name__) # 习惯性书写
# 创建了网址/show/info和函数的对应关系
# 以后用户在浏览器上访问/show/info,网址自动执行index
@app.route("/show/info")
def index():
return "中国你好"
if __name__ == '__main__':
app.run()
from flask import Flask,render_template
app = Flask(__name__)
@app.route("/show/info")
def index():
# Flask内部会自动打开这个文件,并读取内容,将内容给用户返回。
# 默认:去当前项目目录的templates文件夹中找。
return render_template("index.html")
if __name__ == '__main__':
app.run()
index.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demotitle>
head>
<body>
<h1>中国h1>
<span>你好span>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>前端基础title>
head>
<body>
<span>普通文本,用于分区span>
<strong>这是加粗标签strong>
<input type="text" value="行内块标签">
<p>这是一个段落,会换行p>
<h1>一级标题h1>
<h2>二级标题h2>
<h3>三级标题h3>
<ul>
<li>无序列表li>
<li>无序列表li>
<li>无序列表li>
ul>
<div>盒标签,用于分区
<span>hello worldspan>
div>
body>
html>
<a href="https://www.bilibili.com/">点击跳转a>
<a href="/get/news">点击跳转a>
<a href="https://www.bilibili.com/" target="_blank">a>
是一个自闭合标签,也被称为空标签或空元素。自闭合标签是指在HTML中没有内容的元素,它们在标签内没有任何文本或其他HTML元素。这些标签在HTML中只有一个开始标签,没有对应的结束标签。
显示别人的图片
<img src="图片地址" />
显示自己的图片
<img src="自己图片的地址"/>
前提在自己项目中创建:static目录,图片要放在static中
在页面引入图片时
<img src="/static/pic1.jpg"/>
<ul>
<li>这是无序列表li>
<li>这是无序列表li>
<li>这是无序列表li>
<li>这是无序列表li>
ul>
<ol>
<li>这是有序列表li>
<li>这是有序列表li>
<li>这是有序列表li>
<li>这是有序列表li>
ol>
<h1>下拉框h1>
<select>
<option>北京option>
<option>上海option>
<option>深圳option>
select>
<select multiple>
<option>天津option>
<option>南京option>
<option>成都option>
select>
<select>
<h1>数据表格h1>
<table>
<thead>
<tr> <th>idth> <th>姓名th> <th>年龄th>tr>
thead>
<tbody>
<tr> <td>001td> <td>hzhtd> <td>22td> tr>
<tr> <td>001td> <td>hzhtd> <td>22td> tr>
<tr> <td>001td> <td>hzhtd> <td>22td> tr>
<tr> <td>001td> <td>hzhtd> <td>22td> tr>
<tr> <td>001td> <td>hzhtd> <td>22td> tr>
tbody>
table>
demo
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>get_liststitle>
<style>
/*修改a标签为块级标签*/
a {display: block}
style>
head>
<body>
<h1>用户列表h1>
<table border="1">
<thead>
<tr>
<th>idth>
<th>姓名th>
<th>年龄th>
<th>图片th>
<th>更多th>
tr>
thead>
<tbody>
<tr>
<td>001td>
<td>hzhtd>
<td>22td>
<td>
<img src="/static/pic.jpg" alt="此图片不存在" style="height: 50px;width: 50px">
td>
<td>
<a href="https://www.bilibili.com/" target="_blank">点击跳转a>
<a href="/get/news" target="_blank">查看详情a>
td>
tr>
<tr>
<td>002td>
<td>lainuotd>
<td>23td>
<td>
<img src="/static/pic1.jpg" alt="" style="height: 50px;width: 50px">
td>
<td>
<a href="https://www.bilibili.com/" target="_blank">点击跳转a>
<a href="/get/news" target="_blank">查看详情a>
td>
tr>
<tr>
<td>003td>
<td>pabitd>
<td>18td>
<td>
<img src="/static/pic1.jpg" alt="" style="height: 50px;width: 50px">
td>
<td>
<a href="https://www.bilibili.com/" target="_blank">点击跳转a>
<a href="/get/news" target="_blank">查看详情a>
td>
tr>
tbody>
table>
body>
html>
在HTML中,
元素用于插入图像。
alt
是元素的一个属性,它表示图像的替代文本(alternative text)或者称为"alt文本"。
alt
属性提供了一个描述图像的文本,当图像无法加载时或者用户使用辅助技术(例如屏幕阅读器)浏览网页时,这个文本将显示出来。这样做的目的是为了让用户了解图像的内容,即使图像无法显示也能够传达相关信息。此外,alt
属性还可以在图像加载失败时显示错误信息,帮助用户知道该图像未能正确加载。
<span>输入框span>
<input type="text">
<span>密码框span>
<input type="password">
<span>文件上传span>
<input type="file">
<span>单选框span>
<input type="radio" name="n1">男
<input type="radio" name="n1">女
<span>复选框span>
<input type="checkbox">篮球
<input type="checkbox">网球
<input type="checkbox">足球
<span>按钮span>
<input type="button" value="普通按钮">
<input type="submit" value="提交表单">
<h1>多行文本h1>
<textarea rows = "3">textarea>
method="get"
action="/xxx/xxx/xx"
在浏览器的URL中写入地址,点击回车,访问。
浏览器会发送数据过去,本质上发送的是字符串:
"GET /explore http1.1\r\nhost:...\r\nuser-agent\r\n..\r\n\r\n"
浏览器会发送数据过去,本质上发送的是字符串:
"POST /explore http1.1\r\nhost:...\r\nuser-agent\r\n..\r\n\r\n数据库"
浏览器向后端发送请求时
GET请求【URL方法 / 表单提交】
现象:GET请求、跳转、向后台传入数据数据会拼接在URL上。
https://www.sogou.com/web?query=安卓&age=19&name=xx
注意:GET请求数据会在URL中体现。
POST请求【表单提交】
GET请求
@app.route("/get/reg", methods=["GET"])
def get_reg():
# 1.接收用户通过get形式发送过来的数据
print(request.args)
# 2.给用户返回结果
return "注册成功!"
POST请求
@app.route("/post/reg", methods=["POST"])
def post_reg():
# 1.接收用户通过post形式发送过来的数据
print(request.form)
# 2.给用户返回结果
return "注册成功!"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yAiuVoSu-1692854467500)(image/image-20230728210308801.png)]
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "GET":
return render_template("register.html")
else:
# 1.接收用户通过post形式发送过来的数据
username = request.form.get("username")
pwd = request.form.get("pwd")
gender = request.form.get("gender")
hobby_list = request.form.get("hobby")
city = request.form.get("city")
remark = request.form.get("remark")
print(username, pwd, gender, hobby_list, city, remark)
# 2.给用户返回结果
return "注册成功!"
if __name__ == "__main__":
app.run()
register.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册title>
head>
<body>
<h1>用户注册h1>
<form method="post" action="/register">
<div>
用户名:<input type="text" name="username">
div>
<div>
密码:<input type="password" name="pwd">
div>
<div>
性别:
<input type="radio" name="gender" value="1"> 男
<input type="radio" name="gender" value="2"> 女
div>
<div>
爱好:
<input type="checkbox" name="hobby" value="1"> 篮球
<input type="checkbox" name="hobby" value="2"> 网球
<input type="checkbox" name="hobby" value="3"> 足球
div>
<div>
城市:
<select name="city">
<option value="c1">北京option>
<option value="c2">上海option>
select>
div>
<div>
备注:
<textarea name="remark">textarea>
div>
<div>
<input type="submit" value="submit提交">
div>
form>
body>
html>
浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型 (CSS basic box model),将所有元素表示为一个个矩形的盒子(box)
Width:主体宽度
Height:主体高度
Border:边框
Padding:内边距
Margin:外边距,针对盒子四周的边距,跟其他盒子的隔离,不影响本身元素的宽高
只有padding width height border会影响实际的大小
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css盒模型title>
<style>
.box {
width: 300px;
height: 300px;
background: red;
padding: 30px;
border: 20px solid black;
margin: 50px auto;
}
.box_content {
width: 100%;
height: 100%;
background: blue;
font-size: 24px;
color: white;
text-align: center;
}
style>
head>
<body>
<div class = "box">
<div class = "box_content">
主体
div>
div>
body>
html>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-unUpLTHx-1692854467500)(image/image-20230726160144092.png)]
盒子实际大小:(300+30+20+30+20) *(300+30+20+30+20) = 400 * 400
CSS 层叠样式表(Cascading Style Sheets)
样式定义如何显示HTML元素
CSS规则由两个主要的部分构成:选择器,以及一条或多条声明
权重(优先级)
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=cas, initial-scale=1.0">
<title>css基础title>
<style>
div {
width: 100px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
/* class选择器.类名 */
/* 在语句后添加!important关键字,这个语句变成权重最高 */
.bd {
background: green !important;
}
/* id选择器.id名 */
#bd_pink {
background: pink;
}
style>
head>
<body>
<div style="width: 100px;height: 100px;background: red;">这是行内样式div>
<div>这是内部样式div>
<div class = "bd">class选择器div>
<div class = "bd">class选择器div>
<div class = "bd" id = "bd_pink">id选择器div>
body>
html>
/* 在语句后添加!important关键字,这个语句变成权重最高 */
.bd {
background: green !important;
}
ID选择器
#c1{
}
'c1'>
类选择器(最多)
.c1{
}
'c1'>
标签选择器
div{
}
xxx
属性选择器
input[type='text']{
border: 1px solid red;
}
.v1[xx="456"]{
color: gold;
}
<input type="text">
<input type="password">
<div class="v1" xx="123">sdiv>
<div class="v1" xx="456">fdiv>
<div class="v1" xx="999">adiv>
后代选择器
.yy li{
color: pink;
}
.yy > a{
color: dodgerblue;
}
<div class="yy">
<a>百度a>
<div>
<a>谷歌a>
div>
<ul>
<li>美国li>
<li>日本li>
<li>韩国li>
ul>
div>
关于选择器:
多:类选择器、标签选择器、后代选择器
少:属性选择器、ID选择器
样式覆盖:
Title<img src="..." style="height:100px" />
<div style="color:red;">中国联通div>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.c1{
color:red;
}
style>
head>
<body>
<h1 class='c1'>用户登录h1>
<h1 class='c1'>用户登录h1>
<h1 class='c1'>用户登录h1>
<h1 class='c1'>用户登录h1>
body>
html>
.c1{
height:100px;
}
.c2{
color:red;
}
"en">
"UTF-8">
Title
"stylesheet" href="common.css" />
'c1'>用户登录
'c2'>用户登录
'c2'>用户登录
'c1'>用户登录
外部引用样式
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=cas, initial-scale=1.0">
<title>css基础title>
<link rel="stylesheet" href="./style.css">
head>
/* style.css */
/* 不需要style标签声明 */
div {
width: 100px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
/* class选择器.类名 */
.bd {
background: green;
}
/* id选择器.id名 */
#bd_pink {
background: pink;
}
在flask框架下,css文件必须放在static目录下
三种使用方式:
属性名: 值
行内样式
内部样式
通过选择器来选择对于的元素进行样式的设置
引用方式
.c1{
height: 300px;
width: 500px;
}
注意事项:
块级
行内
css样式:标签 ->
display:inline-block
示例:行内&块级特性
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.c1{
display: inline-block;
height: 100px;
width: 300px;
border: 1px solid red;
}
style>
head>
<body>
<span class="c1">中国span>
<span class="c1">联通span>
<span class="c1">联通span>
<span class="c1">联通span>
body>
html>
示例:块级和行内标签的设置
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
style>
head>
<body>
<div style="display: inline;">中国div>
<span style="display: block;">联通span>
body>
html>
注意:块级 + 块级&行内。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.c1{
color: #00FF7F;
font-size: 58px;
font-weight: 600;
font-family: Microsoft Yahei;
}
style>
head>
<body>
<div class="c1">中国联通div>
<div>中国移动div>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.c1{
height: 59px;
width: 300px;
border: 1px solid red;
text-align: center; /* 水平方向居中 */
line-height: 59px; /* 垂直方向居中 */
}
style>
head>
<body>
<div class="c1">郭智div>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div>
<span>左边span>
<span style="float: right">右边span>
div>
body>
html>
div默认块级标签(霸道),如果浮动起来,就不一样了。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.item{
float: left;
width: 280px;
height: 170px;
border: 1px solid red;
}
style>
head>
<body>
<div>
<div class="item">div>
<div class="item">div>
<div class="item">div>
<div class="item">div>
<div class="item">div>
div>
body>
html>
如果你让标签浮动起来之后,就会脱离文档流。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.item {
float: left;
width: 280px;
height: 170px;
border: 1px solid red;
}
style>
head>
<body>
<div style="background-color: dodgerblue">
<div class="item">div>
<div class="item">div>
<div class="item">div>
<div class="item">div>
<div class="item">div>
<div style="clear: both;">div>
div>
<div>你哦啊呀div>
body>
html>
内边距,我自己的内部设置一点距离。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.outer{
border: 1px solid red;
height: 200px;
width: 200px;
padding-top: 20px;
padding-left: 20px;
padding-right: 20px;
padding-bottom: 20px;
}
style>
head>
<body>
<div class="outer">
<div style="background-color: gold;">听妈妈的话div>
<div>
小朋友你是否下水道发
div>
div>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.outer{
border: 1px solid red;
height: 200px;
width: 200px;
padding: 20px;
}
style>
head>
<body>
<div class="outer">
<div style="background-color: gold;">听妈妈的话div>
<div>
小朋友你是否下水道发
div>
div>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.outer{
border: 1px solid red;
height: 200px;
width: 200px;
padding: 20px 10px 5px 20px;
}
style>
head>
<body>
<div class="outer">
<div style="background-color: gold;">听妈妈的话div>
<div>
小朋友你是否下水道发
div>
div>
body>
html>
外边距,我与别人加点距离。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div style="height: 200px;background-color: dodgerblue;">div>
<div style="background-color: red;height: 100px;margin-top: 20px;">div>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
body{
margin: 0;
}
.header{
background: #333;
}
.container{
width: 1000px;
margin: 0 auto;
}
.container .menu{
float: left;
}
.container .account{
float: right;
}
.header a{
color: #b0b0b0;
line-height: 40px;
display: inline-block;
font-size: 12px;
margin: 0 10px;
}
style>
head>
<body>
<div class="header">
<div class="container">
<div class="menu">
<a>小米官网a>
<a>小米商城a>
<a>MIUIa>
<a>LoTa>
<a>云服务a>
<a>天星科技a>
div>
<div class="account">
<a>登录a>
<a>注册a>
div>
<div style="clear: both">div>
div>
div>
body>
html>
body标签,默认有一个边距,造成页面四边都有白色间隙,如何去除呢?
body{
margin: 0;
}
内容居中
文本居中,文本会在这个区域中居中。
<div style="width: 200px; text-align: center;">武沛齐div>
区域居中,自己要有宽度 + margin-left:auto;margin-right:auto
.container{
width: 980px;
margin: 0 auto;
}
<div class="container">
adfasdf
div>
父亲没有高度或没有宽度,被孩子支撑起来。
如果存在浮动,一定记得加入 。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>site_headertitle>
<style>
body{
margin: 0;
}
.site_header .container{
width: 1226px;
margin: 0 auto;
}
.site_header .ht{
height: 100px;
}
.site_header .container .logo{
float: left;
width: 234px;
}
.site_header .container .logo a{
display: inline-block;
margin-top: 22px;
}
.site_header .container .menu_list{
float: left;
/*纵向高度100px居中,*/
line-height: 100px;
}
.site_header .container a{
display: inline-block;
/*上下内边距0左右内边距10px*/
padding: 0 10px;
color: #333;
font-size: 16px;
text-decoration: none;
}
.site_header .container a:hover{
color: #ff6700;
}
.site_header .container .search{
float: right;
}
style>
head>
<body>
<div class="site_header">
<div class="container">
<div class="ht logo">
<a href="https://www.mi.com/">
<img src="/static/logo_m2.png" alt="" style="width: 56px;height: 56px">
a>
div>
<div class="ht menu_list">
<a href="https://www.mi.com/">Xiaomi手机a>
<a href="https://www.mi.com/">Redmi手机a>
<a href="https://www.mi.com/">电视a>
<a href="https://www.mi.com/">笔记本a>
<a href="https://www.mi.com/">平板a>
<a href="https://www.mi.com/">家电a>
<a href="https://www.mi.com/">路由器a>
<a href="https://www.mi.com/">服务中心a>
<a href="https://www.mi.com/">社区a>
div>
<div class="ht search">div>
<div style="clear:both">div>
div>
div>
body>
html>
一二级菜单整合:
xiaomi_index.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>一级二级菜单title>
<link rel="stylesheet" href="/static/xiaomi_index.css">
head>
<body>
<div class="header">
<div class="container">
<div class="menu">
<a href="https://www.mi.com/">小米官网a>
<a href="https://www.mi.com/">小米商城a>
<a href="https://www.mi.com/">MIUIa>
<a href="https://www.mi.com/">LoTa>
<a href="https://www.mi.com/">云服务a>
<a href="https://www.mi.com/">天星数技a>
<a href="https://www.mi.com/">有品a>
<a href="https://www.mi.com/">小爱开放平台a>
<a href="https://www.mi.com/">企业团购a>
<a href="https://www.mi.com/">资质证照a>
<a href="https://www.mi.com/">协议规则a>
<a href="https://www.mi.com/">下载appa>
<a href="https://www.mi.com/">Select Locationa>
div>
<div class="account">
<a href="https://www.mi.com/">登录a>
<a href="https://www.mi.com/">注册a>
<a href="https://www.mi.com/">消息通知a>
div>
<div style="clear: both">div>
div>
div>
<div class="site_header">
<div class="container">
<div class="ht logo">
<a href="https://www.mi.com/">
<img src="/static/logo_m2.png" alt="" style="width: 56px;height: 56px">
a>
div>
<div class="ht menu_list">
<a href="https://www.mi.com/">Xiaomi手机a>
<a href="https://www.mi.com/">Redmi手机a>
<a href="https://www.mi.com/">电视a>
<a href="https://www.mi.com/">笔记本a>
<a href="https://www.mi.com/">平板a>
<a href="https://www.mi.com/">家电a>
<a href="https://www.mi.com/">路由器a>
<a href="https://www.mi.com/">服务中心a>
<a href="https://www.mi.com/">社区a>
div>
<div class="ht search">div>
<div style="clear:both">div>
div>
div>
body>
html>
xiaomi_index.css
body{
margin: 0;
}
.header{
background: #333;
}
.header .container{
width: 1000px;
margin: 0 auto;
}
.header .menu{
float: left;
}
.header .account{
float: right;
}
.header a{
color: #b0b0b0;
line-height: 40px;
display: inline-block;
font-size: 12px;
margin: 0 5px;
text-decoration: none;
}
.header a:hover{
color: white ;
}
.site_header .container{
width: 1226px;
margin: 0 auto;
}
.site_header .ht{
height: 100px;
}
.site_header .container .logo{
float: left;
width: 234px;
}
.site_header .container .logo a{
display: inline-block;
margin-top: 22px;
}
.site_header .container .menu_list{
float: left;
/*纵向高度100px居中,*/
line-height: 100px;
}
.site_header .container a{
display: inline-block;
/*上下内边距0左右内边距10px*/
padding: 0 10px;
color: #333;
font-size: 16px;
text-decoration: none;
}
.site_header .container a:hover{
color: #ff6700;
}
.site_header .container .search{
float: right;
}
a标签是行内标签,行内标签的高度、内外边距,默认无效。
垂直方向居中
a标签默认有下划线。
鼠标放上去之后hover
.c1:hover{
...
}
a:hover{
}
html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>一级二级菜单title>
<link rel="stylesheet" href="/static/xiaomi_index.css">
head>
<body>
<div class="header">
<div class="container">
<div class="menu">
<a href="https://www.mi.com/">小米官网a>
<a href="https://www.mi.com/">小米商城a>
<a href="https://www.mi.com/">MIUIa>
<a href="https://www.mi.com/">LoTa>
<a href="https://www.mi.com/">云服务a>
<a href="https://www.mi.com/">天星数技a>
<a href="https://www.mi.com/">有品a>
<a href="https://www.mi.com/">小爱开放平台a>
<a href="https://www.mi.com/">企业团购a>
<a href="https://www.mi.com/">资质证照a>
<a href="https://www.mi.com/">协议规则a>
<a href="https://www.mi.com/">下载appa>
<a href="https://www.mi.com/">Select Locationa>
div>
<div class="account">
<a href="https://www.mi.com/">登录a>
<a href="https://www.mi.com/">注册a>
<a href="https://www.mi.com/">消息通知a>
div>
<div style="clear: both">div>
div>
div>
<div class="site_header">
<div class="container">
<div class="ht logo">
<a href="https://www.mi.com/">
<img src="/static/logo_m2.png" alt="" style="width: 56px;height: 56px">
a>
div>
<div class="ht menu_list">
<a href="https://www.mi.com/">Xiaomi手机a>
<a href="https://www.mi.com/">Redmi手机a>
<a href="https://www.mi.com/">电视a>
<a href="https://www.mi.com/">笔记本a>
<a href="https://www.mi.com/">平板a>
<a href="https://www.mi.com/">家电a>
<a href="https://www.mi.com/">路由器a>
<a href="https://www.mi.com/">服务中心a>
<a href="https://www.mi.com/">社区a>
div>
<div class="ht search">div>
<div style="clear:both">div>
div>
div>
<div class="slider">
<div class="container">
<div class="item">
<img src="/static/big_banner.png" alt="图片不存在">
div>
div>
div>
<div class="news">
<div class="container">
<div class="channel left">
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div class="item">
<a href="#">
<img src="/static/button4.png" alt="">
<span>保障服务span>
a>
div>
<div style="clear: both">div>
div>
<div class="list-item left">
<a href="#">
<img src="/static/button1.jpg" alt="">
a>
div>
<div class="list-item left">
<a href="#">
<img src="/static/button2.jpg" alt="">
a>
div>
<div class="list-item left">
<a href="#">
<img src="/static/button3.jpg" alt="">
a>
div>
<div style="clear: both">div>
div>
div>
body>
html>
css
body{
margin: 0;
}
img{
width: 100%;
height: 100%;
}
.left{
float: left;
}
.container{
width: 1226px;
margin: 0 auto;
}
.header{
background: #333;
}
.header .container{
width: 1000px;
margin: 0 auto;
}
.header .menu{
float: left;
}
.header .account{
float: right;
}
.header a{
color: #b0b0b0;
line-height: 40px;
display: inline-block;
font-size: 12px;
margin: 0 5px;
text-decoration: none;
}
.header a:hover{
color: white ;
}
.site_header .container{
width: 1226px;
margin: 0 auto;
}
.site_header .ht{
height: 100px;
}
.site_header .container .logo{
float: left;
width: 234px;
}
.site_header .container .logo a{
display: inline-block;
margin-top: 22px;
}
.site_header .container .menu_list{
float: left;
/*纵向高度100px居中,*/
line-height: 100px;
}
.site_header .container a{
display: inline-block;
/*上下内边距0左右内边距10px*/
padding: 0 10px;
color: #333;
font-size: 16px;
text-decoration: none;
}
.site_header .container a:hover{
color: #ff6700;
}
.site_header .container .search{
float: right;
}
.slider .item{
width: 1226px;
height: 460px;
margin: 0 auto;
}
.news{
margin-top: 14px;
}
.news .channel{
width: 228px;
height: 164px;
background-color: #5f5750;
padding: 3px;
}
.news .channel .item{
height: 82px;
width: 76px;
float: left;
text-align: center;
}
.news .channel a{
display: inline-block;
font-size: 12px;
padding-top: 10px;
color: #fff;
text-decoration: none;
opacity: 0.7;
}
.news .channel a:hover{
opacity: 1;
}
.news span{
display: block;
}
。news .channel .item img{
height: 24px;
width: 24px;
display: block;
margin: 0 auto 4px;
}
.news .list-item{
width: 316px;
height: 170px;
margin-left: 14px
}
.news .list-item a:hover{
opacity: 0.6;
}
设置透明度
opacity:0.5; /* 0 ~ 1 */
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.c1 {
color: red;
font-size: 18px;
}
.c1:hover {
color: green;
font-size: 50px;
}
.c2 {
height: 300px;
width: 500px;
border: 3px solid red;
}
.c2:hover {
border: 3px solid green;
}
.download {
display: none;
}
.app:hover .download {
display: block;
}
.app:hover .title{
color: red;
}
style>
head>
<body>
<div class="c1">联通div>
<div class="c2">广西div>
<div class="app">
<div class="title">下载APPdiv>
<div class="download">
<img src="images/qcode.png" alt="">
div>
div>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.c1:after{
content: "大帅哥";
}
style>
head>
<body>
<div class="c1">吴阳军div>
<div class="c1">梁吉宁div>
body>
html>
很重要的应用:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.clearfix:after{
content: "";
display: block;
clear: both;
}
.item{
float: left;
}
style>
head>
<body>
<div class="clearfix">
<div class="item">1div>
<div class="item">2div>
<div class="item">3div>
div>
body>
html>
"display"是CSS中的一个属性,用于定义HTML元素的显示类型(display type)。通过"display"属性,你可以控制元素如何显示在页面上。
常用的"display"属性取值有以下几种:
block
: 元素将以块级元素的形式显示。这意味着元素会独占一行,并且宽度会默认填满父容器的宽度。常见的块级元素有,
等。
inline
: 元素将以内联元素的形式显示。这意味着元素不会独占一行,它只会使用它需要的宽度,并允许其他元素与其在同一行上。常见的内联元素有,
,
等。
inline-block
: 元素将以内联块级元素的形式显示。这个值结合了inline
和block
的特性,元素会在同一行显示,但可以设置宽高等块级元素的属性。常见的内联块级元素有,
等。
none
: 元素将不会被显示,即在页面中不占用空间,并且不可见。flex
: 元素将以弹性盒模型的形式显示。这是CSS3中引入的布局模型,允许更灵活的布局方式。grid
: 元素将以网格布局的形式显示。这也是CSS3中引入的布局模型,允许使用网格来进行布局。 table
: 元素将以表格的形式显示,即类似于
前,整个body的末尾处(推荐)
因为html从上到下执行,如果js很多,放在head里会再加载网页前浪费很多时间
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
style>
<script type="text/javascript">
//编写js代码
script>
head>
<body>
<div class="container">
<div class="header">
div>
<div class="content">
div>
div>
<script type="text/javascript">
//编写js代码
script>
body>
html>
JS代码的存在形式:
当前HTML中。
在其他js文件中,导入使用。
my.js
function f1(){
alert(123);
}
导入js
<script src="static/js/my.js">script>
HTML的注释
CSS的注释,style代码块内
/* 注释内容 */
JavaScript的注释,script代码块内
// 注释内容
/* 注释内容 */
使用 typeof 操作符可以返回变量的数据类型。
typeof 操作符有带括号和不带括号两种用法,如下例所示:
typeof x; // 获取变量 x 的数据类型
typeof(x); // 获取变量 x 的数据类型
所谓标识符,就是名字。JavaScript 中的标识符包括变量名、函数名、参数名、属性名、类名等。
合法的标识符应该注意以下强制规则:
_
)或美元符号($)。示例:
var str = "欢迎来到我的世界"
document.write(str)
关键字(Keyword)就是 JavaScript 语言内部使用的一组名字(或称为命令)。
这些名字具有特定的用途,用户不能自定义同名的标识符。
具体说明如表所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZV3uIJLV-1692854497553)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E5%85%B3%E9%94%AE%E5%AD%97.png)]
保留字就是 JavaScript 语言内部预备使用的一组名字(或称为命令)。
这些名字目前还没有具体的用途,是为 JavaScript 升级版本预留备用的,建议用户不要使用。
具体说明如表所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lRk4RBEj-1692854497553)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E4%BF%9D%E7%95%99%E5%AD%97.png)]
JavaScript 严格区分大小写,所以 Hello 和 hello 是两个不同的标识符。
注释是给开发人员看的,程序在执行时会自动忽略注释的内容
所以我们通常使用注释来为代码添加一些解释说明或描述,以提高代码的可读性。
单行注释以双斜杠//
开头,//
之后的所有内容都会看作是注释的内容,对//
之前的内容则不会产生影响。
<html>
<head>
<title>JavaScripttitle>
head>
<body>
<div id="demo">div>
<script>
// 在 id 属性为 demo 的标签中添加指定内容
document.getElementById("demo").innerHTML = '我是二级标题
';
script>
body>
html>
innerHTML属性允许更改html元素的内容
多行注释以/*
开头,并以*/
结尾,出现在/*
和*/
之间的所有内容都会看作是注释的内容。
<html>
<head>
<title>JavaScripttitle>
head>
<body>
<div id="demo">div>
<script>
/*
在 id 属性为 demo 的标签中
添加指定内容
*/
document.getElementById("demo").innerHTML = "http://c.xxx.net/js/";
script>
body>
html>
在 JavaScript 中,定义变量需要使用var
关键字,语法格式如下:
var 变量名;
定义变量时,可以一次定义一个或多个变量,若定义多个变量,则需要在变量名之间使用逗号,
分隔开。
var a,b,c;
变量定义后,如果没有为变量赋值,那么这些变量会被赋予一个初始值——undefined(未定义)。
变量定义后,可以使用等于号=
来为变量赋值,等号左边的为变量的名称,等号右边为要赋予变量的值。
var num; // 定义一个变量 num
num = 1; // 将变量 num 赋值为 1
此外,也可以在定义变量的同时为变量赋值,如下例所示:
var num = 1; // 定义一个变量 num 并将其赋值为 1
var a = 2, b = 3, c = 4; // 同时定义 a、b、c 三个变量并分别赋值为 2、3、4
2015 年以前,JavaScript 只能通过 var 关键字来声明变量。
在 ECMAScript6(ES6)发布之后,新增了 let 和 const 两个关键字来声明变量,其中:
let name = "小明"; // 声明一个变量 name 并赋值为“小明”
let age = 11; // 声明一个变量 age
let age = 13; // 报错:变量 age 不能重复定义
const PI = 3.1415 // 声明一个常量 PI,并赋值为 3.1415
console.log(PI) // 在控制台打印 PI
var与let区别
for (var i = 0; i < 10; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, 100);
})(i);
}
// 输出10个10
for (let i = 0; i < 10; i++) {
setTimeout(function () {
console.log(i);
}, 100);
}
// 输出0-9
var:
1. 通过 `for` 循环,我们在每次迭代中都会调用 `setTimeout` 函数,将一个函数放入事件队列,并设置在 100 毫秒后执行。这意味着在每次迭代中,都会创建一个要执行的函数,但这些函数在 100 毫秒后才会执行。
2. `for` 循环迭代的过程非常快,而且在 JavaScript 中,事件队列中的函数在当前执行堆栈完成后才会执行。因此,在 `for` 循环结束后,事件队列中会有 10 个函数等待执行。
3. 由于事件队列中的函数在 100 毫秒后才会执行,当它们执行时,循环已经结束,变量 `i` 的值将变为 10。因此,无论何时这些函数执行,它们都会输出变量 `i` 的最终值 10。
let:
因为 `let` 具有块级作用域,每次循环迭代都会创建一个新的变量 `i`。这将导致每个函数闭包捕获的是不同的变量 `i` 值,从而得到0-9的递增序列
JavaScript 中的数据类型可以分为两种类型:
基础类型
==
会隐式转换类型再去进行值对比,===
全等会既对比值也对比类型!==
与全等运算符是相反的。 这意味着严格不相等并返回 false
的地方,用严格相等运算符会返回 true
,反之亦然。 严格不相等运算符不会转换值的数据类型。引用类型
var a = "abc"
a = 123 //重新创建了一个123对象,a指向,"abc"长时间不被引用会被js垃圾回收
a.toUpperCase()
var obj = {
name: "张三"
}
obj.name = "李四"
console.log(obj) // 值被改变了
// {name: '李四'}
var a = 1
a == True //True 转换为布尔值了
a === True //False
JavaScript,编程语言。
<script>
// 定义变量
var name = "hzh";
// 输出
console.log(name);
script>
查看输出结果:
// 声明
// 定义字符串
console.log(name1) // 怀志华1
console.log(name2) // 怀志华2
// 常见功能
var name = "js 你好 ";
// 获取字符串长度
var v1 = name.length;
// 字符串索引
var v2 = name[0]; // 等效于name.charAt(0)
// 去除两边空格
var v3 = name.trim();
// 切片,左闭右开
var v4 = name.substring(0, 2);
console.log(v1) // 6
console.log(v2) // j
console.log(v3) // js 你好
console.log(v4) // js
实现单个字符串流转的功能
<script>
// 1.去html中找到某个标签并获取他的内容(DOM)
var tag = document.getElementById("txt");
var data_string = tag.innerText;
// 2.跑马灯动态效果,获取文本第一个字符放在字符串最后
var first_char = data_string[0];
var other_string = data_string.substring(1, data_string.length);
var new_text = other_string + first_char
// 3.在html中更新内容
tag.innerText = new_text;
script>
函数封装功能
<script>
function show() {
// 1.去html中找到某个标签并获取他的内容(DOM)
var tag = document.getElementById("txt");
var data_string = tag.innerText;
// 2.跑马灯动态效果,获取文本第一个字符放在字符串最后
var first_char = data_string[0];
var other_string = data_string.substring(1, data_string.length);
var new_text = other_string + first_char
// 3.在html中更新内容
tag.innerText = new_text;
}
// js中的定时器,每1000ms即一秒执行一次show函数
setInterval(show, 1000);
script>
类似py列表
// 定义
var v1 = [11,22,33,44];
var v2 = Array([11,22,33,44]);
typeof(v1)/typeof(v2) -> object
数组也是特殊的对象
// 操作
var v1 = [11,22,33,44];
v1[1]
v1[0] = "hzh";
// 添加
v1.push("联通"); // 尾部追加 [11,22,33,44,"联通"]
v1.unshift("联通"); // 头部添加 ["联通", 11,22,33,44]
v1.splice(索引位置,0,元素);
v1.splice(1,0,"中国"); // 索引为1处添加 [11,"中国",22,33,44]
// 删除
v1.pop() //尾部删除
v1.shift() //头部删除
v1.splice(索引位置,1)
v1.splice(2,1); // 索引为2的元素删除 [11,22,44];
// splice 0:添加 1:删除
// 循环
var v1 = [11,22,33,44];
// 注意循环的是**索引**而不是元素
// 注意循环里的idx是字符串类型的索引。
for(var idx in v1){
// idx=0/1/2/3/ data=v1[idx]
}
for(let idx in v1){
v1[idx] = parseInt(idx)+1;
}
var v1 = [11,22,33,44];
for(var i=0; i<v1.length; i++){
// i=0/1/2/3 data=v1[idx]
}
// 每次循环结束执行i++
注意:break和continue 和py中除代码书写结构外,用法一致
<body>
<ul id="city">
ul>
<script>
// 动态获取数据
var city_list = ["北京", "上海", "深圳"]
for (var idx in city_list) {
var text = city_list[idx];
// 创建标签
var tag = document.createElement("li");
// 在li标签中写入内容
tag.innerText = text;
// 添加到id=city那个标签里面 DOM
var parent_tag = document.getElementById("city");
parent_tag.appendChild(tag);
}
script>
body>
类似py的字典
// 创建对象
info = {
"name":"hzh",
"age":18
}
// 推荐js冒号左边不加引号
info = {
name:"hzh",
age:18
}
// 获取对象值
info.age
info.name = "hzh"
info["age"]
info["name"] = "hzh"
//删除键
delete info["age"]
info = {
name:"hzh",
age:18
}
//循环
for(var key in info){
// key=name/age data=info[key]
}
注意:JavaScript 中,当你想要使用一个变量的值作为属性名来访问对象的属性时,你需要使用方括号 [] 来包裹属性名,而不是使用点 . 运算符。
测试对象属性
要检查某个对象是否具有一个属性,你可以使用 `.hasOwnProperty()` 方法。 根据对象是否具有该属性,`someObject.hasOwnProperty(someProperty)` 返回 `true` 或 `false`。
<body>
<table border="1">
<thead>
<tr>
<th>idth>
<th>姓名th>
<th>年龄th>
tr>
<tbody id="body">
tbody>
thead>
table>
<script>
// 数据列表
var data_list = [
{id: 1, name: "hzh", age: 18},
{id: 2, name: "hzh", age: 18},
{id: 3, name: "hzh", age: 18},
{id: 4, name: "hzh", age: 18},
];
for (var idx in data_list) {
// 获取一行数据
var info = data_list[idx];
// 创建一个tr标签
var tr = document.createElement("tr");
for (var key in info) {
// 获取键对应的值
var text = info[key];
// 创建一个td标签
var td = document.createElement("td");
// 将值放入td中
td.innerText = text;
// 将td放入tr中
tr.appendChild(td);
// 根据id获取id标签
var body_tag = document.getElementById("body")
// 将tr添加到tbody里
body_tag.appendChild(tr)
}
}
script>
body>
字符串(String)类型是一段以单引号''
或双引号""
包裹起来的文本,例如 ‘123’、“abc”。
数值(Number)类型用来定义数值,JavaScript 中不区分整数和小数(浮点数)。
统一使用 Number 类型表示,如下例所示:
var num1 = 123; // 整数
var num2 = 3.14; // 浮点数
布尔(Boolean)类型只有两个值,true(真)或者 false(假),在做条件判断时使用的比较多。
var a = true; // 定义一个布尔值 true
var b = false; // 定义一个布尔值 false
var c = 2 > 1; // 表达式 2 > 1 成立,其结果为“真(true)”,所以 c 的值为布尔类型的 true
var d = 2 < 1; // 表达式 2 < 1 不成立,其结果为“假(false)”,所以 c 的值为布尔类型的 false
Null 是一个只有一个值的特殊数据类型,表示一个“空”值,即不存在任何值,什么都没有,用来定义空对象指针。
Undefined 也是一个只有一个值的特殊数据类型,表示未定义。当我们声明一个变量但未给变量赋值时,这个变量的默认值就是 Undefined。例如:
var num;
console.log(num); // 输出 undefined
null undefined
"zhangsan".match(/abc/g)//null
var c //未赋值
console.log(c) //undefined
Symbol 是 ECMAScript6 中引入的一种新的数据类型,表示独一无二的值,Symbol 类型的值需要使用 Symbol() 函数来生成,如下例所示:
var str = "123";
var sym1 = Symbol(str);
var sym2 = Symbol(str);
console.log(sym1); // 输出 Symbol(123)
console.log(sym2); // 输出 Symbol(123)
const info = {
name: "张三",
[Symbol("job")]: "盗贼"
}
const info1 = {
[Symbol("job")]: "囚徒"
}// 就不会覆盖而是覆盖
javaScript 中的对象(Object)类型是一组由键、值组成的无序集合,定义对象类型需要使用花括号{ }
,语法格式如下:
{name1: value1, name2: value2, name3: value3, ..., nameN: valueN}
其中 name1、name2、…、nameN 为对象中的键,value1、value2、…、valueN 为对应的值。
在 JavaScript 中,对象类型的键都是字符串类型的,值则可以是任意数据类型。要获取对象中的某个值,可以使用对象名.键
的形式,如下例所示:
var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};
console.log(person.name); // 输出 Bob
console.log(person.age); // 输出 20
new 关键字
// new String(abc),所以可以调用String的方法,创建的是一个临时的对象
var str = "abc"
str.length//3 //str是基础类型
var str1 = new String("abc")//创建了一个对象
str1
//String {'abc'} //str1是字符串类型
String(123)//直接使用String时就是类型转换,而new是创建了一个对象
//包装对象
new String();
new Number();
new Boolean();
数组(Array)是一组按顺序排列的数据组合。
数组中的每个值都称为元素,而且数组中可以包含任意类型的数据。
在 JavaScript 中定义数组需要使用方括号[ ]
,数组中的每个元素使用逗号进行分隔,例如:
[1, 2, 3, 'hello', true, null]
另外,也可以使用 Array() 函数来创建数组,如下例所示:
var arr = new Array(1, 2, 3, 4);
console.log(arr); // 输出 [1, 2, 3, 4]
函数(Function)是一段具有特定功能的代码块。
函数并不会自动运行,需要通过函数名调用才能运行,如下例所示:
function sayHello(name){
return "Hello, " + name;
}
var res = sayHello("Peter");
console.log(res); // 输出 Hello, Peter
运算符是用来告诉 JavaScript 引擎执行某种操作的符号。
例如加号(+)表示执行加法运算,减号(-)表示执行减法运算等。
算数运算符用来执行常见的数学运算,例如加法、减法、乘法、除法等。
下表中列举了 JavaScript 中支持的算术运算符:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAqAcSCw-1692854497554)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E7%AE%97%E6%95%B0%E8%BF%90%E7%AE%97%E7%AC%A6.png)]
var x = 10,
y = 4;
console.log("x + y =", x + y); // 输出:x + y = 14
console.log("x - y =", x - y); // 输出:x - y = 6
console.log("x * y =", x * y); // 输出:x * y = 40
console.log("x / y =", x / y); // 输出:x / y = 2.5
console.log("x % y =", x % y); // 输出:x % y = 2
赋值运算符用来为变量赋值,下表中列举了 JavaScript 中支持的赋值运算符:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DZ7VacLS-1692854497554)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E8%B5%8B%E5%80%BC%E8%BF%90%E7%AE%97%E7%AC%A6.png)]
var x = 10;
x += 20;
console.log(x); // 输出:30
var x = 12,
y = 7;
x -= y;
console.log(x); // 输出:5
x = 5;
x *= 25;
console.log(x); // 输出:125
x = 50;
x /= 10;
console.log(x); // 输出:5
x = 100;
x %= 15;
console.log(x); // 输出:10
JavaScript 中的+
和+=
运算符除了可以进行数学运算外,还可以用来拼接字符串,其中:
+
运算符表示将运算符左右两侧的字符串拼接到一起;+=
运算符表示先将字符串进行拼接,然后再将结果赋值给运算符左侧的变量。var x = "Hello ";
var y = "World!";
var z = x + y;
console.log(z); // 输出:Hello World!
x += y;
console.log(x); // 输出:Hello World!
自增、自减运算符用来对变量的值进行自增(+1)、自减(-1)操作。
下表中列举了 JavaScript 中支持的自增、自减运算符:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foauhopX-1692854497555)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E8%87%AA%E5%A2%9E%EF%BC%8C%E8%87%AA%E5%87%8F%E8%BF%90%E7%AE%97%E7%AC%A6.png)]
var x;
x = 10;
console.log(++x); // 输出:11
console.log(x); // 输出:11
x = 10;
console.log(x++); // 输出:10
console.log(x); // 输出:11
x = 10;
console.log(--x); // 输出:9
console.log(x); // 输出:9
x = 10;
console.log(x--); // 输出:10
console.log(x); // 输出:9
比较运算符用来比较运算符左右两侧的表达式,比较运算符的运算结果是一个布尔值。
结果只有两种,不是 true 就是 false。
下表中列举了 JavaScript 中支持的比较运算符:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s0XMLDJ5-1692854497555)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E6%AF%94%E8%BE%83%E8%BF%90%E7%AE%97%E7%AC%A6.png)]
var x = 25;
var y = 35;
var z = "25";
console.log(x == z); // 输出: true
console.log(x === z); // 输出: false
console.log(x != y); // 输出: true
console.log(x !== z); // 输出: true
console.log(x < y); // 输出: true
console.log(x > y); // 输出: false
console.log(x <= y); // 输出: true
console.log(x >= y); // 输出: false
逻辑运算符通常用来组合多个表达式,逻辑运算符的运算结果是一个布尔值。
只能有两种结果,不是 true 就是 false。
下表中列举了 JavaScript 中支持的逻辑运算符:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1UMeuq5e-1692854497555)(https://huaizhihua.oss-cn-beijing.aliyuncs.com/img/%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E7%AC%A6.png)]
var year = 2021;
// 闰年可以被 400 整除,也可以被 4 整除,但不能被 100 整除
if((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))){
console.log(year + " 年是闰年。");
} else{
console.log(year + " 年是平年。");
}
某些情况下,我们可能需要将程序的运行结果输出到浏览器中。
JavaScript 中为我们提供了多种不同的输出语句来向浏览器中输出内容:
使用 JS alert() 函数可以在浏览器中弹出一个提示框。
在提示框中我们可以定义要输出的内容:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
var a = 11,
b = 5;
window.alert("a * b = " + a * b);
script>
body>
html>
JS confirm() 函数与 alert() 函数相似,它们都是 window 对象下的函数,同样可以在浏览器窗口弹出一个提示框,不同的是,使用 confirm() 函数创建的提示框中,除了包含一个“确定”按钮外,还有一个“取消”按钮。如果点击“确定”按钮,那么 confirm() 函数会返回一个布尔值 true,如果点击“取消”按钮,那么 confirm() 函数会返回一个布尔值 false。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
var res = window.confirm("这里是要显示的内容");
if(res == true){
alert("你点击了“确定”按钮");
}else{
alert("你点击了“取消”按钮");
}
script>
body>
html>
使用 JS console.log() 可以在浏览器的控制台输出信息,我们通常使用 console.log() 来调试程序。
要看到 console.log() 的输出内容需要先打开浏览器的控制台。以 Chrome 浏览器为例,要打开控制台您只需要在浏览器窗口按 F12 快捷键,或者点击鼠标右键,并在弹出的菜单中选择“检查”选项即可。最后,在打开的控制台中选择“Console”选项
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
var myArr = ["Chrome","Firefox","Edge","Safari","Opera"];
console.log(myArr);
script>
body>
html>
使用 JS document.write() 可以向 HTML 文档中写入 HTML 或者 JavaScript 代码。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
document.write("现在的时间是:
");
document.write(Date());
script>
body>
html>
与前面介绍的几个函数不同,innerHTML 是一个属性而不是一个函数。
通过它可以设置或者获取指定 HTML 标签中的内容。
示例代码如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<div id="demo">JavaScript 输出div>
<script type="text/javascript">
var demo = document.getElementById("demo");
demo.innerHTML = "innerHTML
"
script>
body>
html>
条件判断语句是程序开发过程中一种经常使用的语句形式。
和大部分编程语言相同,JavaScript中也有条件判断语句。
if 语句是 JavaScript 中最简单的条件判断语句。
语法格式如下:
if(条件表达式){
// 要执行的代码;
}
当条件表达式成立,即结果为布尔值 true 时,就会执行{ }
中的代码。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
var age = 20;
if(age >= 18){ // 如果 age >= 18 的结果为 true,则执行下面 { } 中的代码
alert("adult");
}
script>
body>
html>
if else 语句是 if 语句的升级版,它不仅可以指定当表达式成立时要执行的代码,还可以指定当表达式不成立时要执行的代码,语法格式如下:
if(条件表达式){
// 当表达式成立时要执行的代码
}else{
// 当表达式不成立时要执行的代码
}
示例代码如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
var now = new Date(); // 获取当前的完整日期
var dayOfWeek = now.getDay(); // 获取一个 0-6 之间的数字,用来表示当前是星期几,0 表示星期日、1 表示星期一、以此类推
if (dayOfWeek > 0 && dayOfWeek < 6) { // 判断:如果当前是星期一到星期五中的一天,则输出“Have a nice day!”,若不是则输出“Have a nice weekend!”
alert("Have a nice day!");
} else {
alert("Have a nice weekend!");
}
script>
body>
html>
类似py elif语句
if 和 if else 语句都只有一个条件表达式,而 if else if else 语句是它们更高级的形式。
在 if else if else 语句中允许您定义多个条件表达式,并根据表达式的结果执行相应的代码。
语法格式如下:
if (条件表达式 1) {
// 条件表达式 1 为真时执行的代码
} else if (条件表达式 2) {
// 条件表达式 2 为真时执行的代码
}
...
else if (条件表达式N) {
// 条件表达式 N 为真时执行的代码
} else {
// 所有条件表达式都为假时要执行的代码
}
示例代码如下
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<script type="text/javascript">
var now = new Date(); // 获取当前的完整日期
var dayOfWeek = now.getDay(); // 获取一个 0-6 之间的数字,用来表示当前是星期几,0 表示星期日、1 表示星期一、以此类推
if(dayOfWeek == 0) { // 判断当前是星期几
alert("星期日")
} else if(dayOfWeek == 1) {
alert("星期一")
} else if(dayOfWeek == 2) {
alert("星期二")
} else if(dayOfWeek == 3) {
alert("星期三")
} else if(dayOfWeek == 4) {
alert("星期四")
} else if(dayOfWeek == 5) {
alert("星期五")
} else {
alert("星期六")
}
script>
body>
html>
JS switch case 语句与语句的多分支结构类似,都可以根据不同的条件来执行不同的代码。
但是与 if else 多分支结构相比,switch case 语句更加简洁和紧凑,执行效率更高。
switch case 语句的语法格式如下:
switch (表达式){
case value1:
statements1 // 当表达式的结果等于 value1 时,则执行该代码
break;
case value2:
statements2 // 当表达式的结果等于 value2 时,则执行该代码
break;
......
case valueN:
statementsN // 当表达式的结果等于 valueN 时,则执行该代码
break;
default :
statements // 如果没有与表达式相同的值,则执行该代码
}
switch 语句根据表达式的值,依次与 case 子句中的值进行比较:
示例代码如下:
var id = 3;
switch (id) {
case 1 :
console.log("普通会员");
break; //停止执行,跳出switch
case 2 :
console.log("VIP会员");
break; //停止执行,跳出switch
case 3 :
console.log("管理员");
break; //停止执行,跳出switch
default : //上述条件都不满足时,默认执行的代码
console.log("游客");
}
循环就是重复做一件事,在编写代码的过程中,我们经常会遇到一些需要反复执行的操作。
循环可以减轻编程压力,避免代码冗余,提高开发效率,方便后期维护。
while 循环的语法格式如下:
while (条件表达式) {
// 要执行的代码
}
示例代码
var i = 1;
while( i <= 5) {
document.write(i+", ");
i++;
}
do while 循环与while 循环非常相似,不同之处在于,do while 循环会先执行循环中的代码,然后再对条件表达式进行判断。因此,无论条件表达式是真还是假,do while 循环都能至少执行一次,而 while 循环就不行了,如果条件表达式为假会直接退出 while 循环。
do {
// 需要执行的代码
} while (条件表达式);
示例代码
var i = 1;
do{
document.write(i + " ");
i++;
}while (i > 5);
for 循环中包含三个可选的表达式 initialization、condition 和 increment,其中:
示例代码:
for (var i = 1; i <= 10; i++) {
document.write(i + " ");
}
运行结果:
1 2 3 4 5 6 7 8 9 10
var fruits = ["python", "java", "php", "mysql", "redis"];
for(var i = 0; i < fruits.length; i++) {
document.write(fruits[i] + " ");
}
默认情况下循环会在表达式结果为假时自动退出循环,否则循环会一直持续下去。某些情况下,我们不用等待循环自动退出,可以主动退出循环,JavaScript 中提供了 break 和 continue 两个语句来实现退出循环和退出(跳过)当前循环,下面我们就来详细介绍一下。
使用 break 语句还可以用来跳出循环,让程序继续执行循环之后的代码。
示例:
for (var i = 0; i < 10; i++) {
if(i == 5) {
break;
}
document.write("i = " + i + "
");
}
document.write("循环之外的代码");
continue 语句用来跳过本次循环,执行下次循环。
示例:
for (var i = 0; i < 10; i++) {
if(i % 2 == 0) {
continue;
}
document.write(i + " ");
}
JS 函数声明需要以 function 关键字开头,之后为要创建的函数名称,function 关键字与函数名称之间使用空格分开,函数名之后为一个括号( )
,括号中用来定义函数中要使用的参数(多个参数之间使用逗号,
分隔开),一个函数最多可以有 255 个参数,最后为一个花括号{ }
,花括号中用来定义函数的函数体(即实现函数的代码),如下所示:
function functionName(parameter_list) {
// 函数中的代码
}
代码示例如下:
function sayHello(name){
document.write("Hello " + name);
}
一旦定义好了一个函数,我们就可以在当前文档的任意位置来调用它。调用函数非常简单,只需要函数名后面加上一个括号即可,例如 alert()、write()。注意,如果在定义函数时函数名后面的括号中指定了参数,那么在调用函数时也需要在括号中提供对应的参数。
示例如下:
function sayHello(name){
document.write("Hello " + name);
}
// 调用 sayHello() 函数
sayHello('python');
在定义函数时,可以为函数的参数设置一个默认值,这样当我们在调用这个函数时,如果没有提供参数,就会使用这个默认值作为参数值,如下例所示:
function sayHello(name = "World"){
document.write("Hello " + name);
}
sayHello();
sayHello('python');
在函数中可以使用 return 语句将一个值(函数的运行结果)返回给调用函数的程序,这个值可以是任何类型,例如数组、对象、字符串等。对于有返回值的函数,可以会使用一个变量来接收这个函数的返回值,示例代码如下:
function getSum(num1, num2){
return num1 + num2;
}
var sum1 = getSum(7, 12); // 函数返回值为:19
var sum2 = getSum(-5, 33); // 函数返回值为:28
另外,一个函数只能有一个返回值,若要返回多个值则,则可以将值放入一个数组中,然后返回这个数组即可。
DOM是Document Object Model(文档对象模型)的缩写。它是一种编程接口(API),用于在HTML和XML文档中以对象的方式表示和操作文档。
DOM,就是一个模块,模块可以对HTML页面中的标签进行操作。
var tag = document.getElementById("xx");
tag.innerText
tag.innerText = "哈哈哈哈哈";
var tag = document.createElement("div");
tag.innerText = "哈哈哈哈哈";
<ul id="city">
ul>
<script type="text/javascript">
var tag = document.getElementById("city");
var newTag = document.createElement("li");
newTag.innerText = "北京";
// 把newTag标签添加到页面里
tag.appendChild(newTag);
script>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<input type="text" placeholder="请输入内容" id="txtUser"/>
<input type="button" value="点击添加" onclick="addCityInfo()">
<ul id="city">
ul>
<script type="text/javascript">
function addCityInfo() {
// 1.找到输入标签
var txtTag = document.getElementById("txtUser");
// 2.获取input框中用户输入的内容
var newString = txtTag.value;
// 判断用户输入是否为空,只有不为空才能继续。
if (newString.length > 0) {
// 3.创建标签 中间的文本信息就是用户输入的内容
var newTag = document.createElement("li");
newTag.innerText = newString;
// 4.标签添加到ul中
var parentTag = document.getElementById("city");
parentTag.appendChild(newTag);
// 3.将input框内容清空
txtTag.value = "";
}else{
alert("输入不能为空");
}
}
script>
body>
html>
注意:DOM中还有很多操作。
DOM可以实现很多功能,但是比较繁琐。
页面上的效果:jQuery来实现 / vue.js / react.js
JS 事件(event)是当用户与网页进行交互时发生的事情,例如单机某个链接或按钮、在文本框中输入文本、按下键盘上的某个按键、移动鼠标等等。当事件发生时,您可以使用 JavaScript 中的事件处理程序(也可称为事件监听器)来检测并执行某些特定的程序。
一般情况下事件的名称都是以单词on
开头的,例如点击事件 onclick、页面加载事件 onload 等。下表中列举了一些 JavaScript 中常用的事件。
事件只有与 HTML 元素绑定之后才能被触发,为 HTML 元素绑定事件处理程序的方法由很多,最简单的就是通过 HTML事件属性来直接绑定事件处理程序,例如 onclick、onmouseover、onmouseout 等属性。
以 onclick 属性为例,通过该属性我们可以为指定的 HTML 元素定义鼠标点击事件(即在该元素上单击鼠标左键时触发的事件),示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<button type="button" onclick="myBtn()">按钮button>
<script type="text/javascript">
function myBtn(){
alert("Hello World!");
}
script>
body>
html>
我们也可以直接使用 JavaScript 中提供的内置函数来为指定元素绑定事件处理程序,如下例所示:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<button type="button" id="myBtn">按钮button>
<script>
function sayHello() {
alert('Hello World!');
}
document.getElementById("myBtn").onclick = sayHello;
script>
body>
html>
一般情况下,事件可以分为四大类——鼠标事件、键盘事件、表单事件和窗口事件,另外还有一些其它事件。下面通过几个示例来简单介绍一些比较常用的事件。
onmouseover 事件就是指当用户鼠标指针移动到元素上时触发的事件,示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<button type="button" onmouseover="alert('鼠标已经移动到了该按钮上');">请将鼠标移动至此处button><br>
<a href="#" onmouseover="myEvent()">请将鼠标移动至此处a>
<script>
function myEvent() {
alert('鼠标已经移动到了该链接上');
}
script>
body>
html>
onmouseout 事件会在鼠标从元素上离开时触发,示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<div style="width: 350px; height: 200px; border:1px solid black" id="myBox">div>
<script>
function myEvent() {
alert('您的鼠标已经离开指定元素');
}
document.getElementById("myBox").onmouseout = myEvent;
script>
body>
html>
onkeydown 事件是指当用户按下键盘上的某个按键时触发的事件,示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<input type="text" onkeydown="myEvent()">
<script>
function myEvent() {
alert("您按下了键盘上的某个按钮");
}
script>
body>
html>
onkeyup 事件是指当用户按下键盘上的某个按键并将其释放(即按下并松开某个按键)时触发的事件,示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScripttitle>
head>
<body>
<input type="text" onkeyup="myEvent()">
<script>
function myEvent() {
alert("您按下了键盘上的某个按钮,并将其释放了");
}
script>
body>
html>
在 JavaScript 中,您可以在任意位置声明变量,但不同的位置会影响变量的可用范围,这个范围称为作用域。作用域可以大致分为两种类型,分别是全局作用域和局部作用域。下面就来分别介绍一下。
全局作用域是指变量可以在当前脚本的任意位置访问,拥有全局作用域的变量也被称为“全局变量”,一般情况下拥有以下特征的变量具有全局作用域:
示例代码如下:
var str = "Hello World!";
function myFun(){
document.write(str); // 输出:Hello World!
}
myFun();
document.write(str); // 输出:Hello World!
在函数内部声明的变量具有局部作用域,拥有局部作用域的变量也被称为“局部变量”,局部变量只能在其作用域中(函数内部)使用。示例代码如下:
function myFun(){
var str = "Hello World!";
document.write(str); // 输出:Hello World!
}
document.write(str); // 报错:str is not defined
在函数内定义的局部变量只有在函数被调用时才会生成,当函数执行完毕后会被立即销毁。
表单是 Web 应用(网站)的重要组成部分,通过表单可以收集用户提交的信息,例如姓名、邮箱、电话等。由于用户在填写这些信息时,有可能出现一些错误,例如输入手机号时漏掉了一位、在输入的内容前后输入空格、邮箱的格式不正确等。为了节省带宽同时避免这些问题对服务器造成不必要的压力,我们可以使用 JavaScript 在提交数据之前对数据进行检查,确认无误后再发送到服务器。
使用 JavaScript 来验证提交数据(客户端验证)比将数据提交到服务器再进行验证(服务器端验证)用户体验要更好,因为客户端验证发生在用户浏览器中,无需向服务器发送请求,所以速度更快,而服务器端验证,需要先将数据提交到服务器,然后服务器再将结果返回给浏览器,用户需要等待服务器响应结果才能知道哪里出了问题。
表单验证通常由两个部分组成:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.container {
width: 300px;
height: 50px;
margin: 200px auto;
padding: 100px;
border: red solid 1px;
text-align: center;
font-size: 24px;
}
style>
head>
<body>
<div class="container">
<form action="" method="post" onsubmit="return validateForm();">
<label>验证码:label>
<input type="text" id="vailcode" name="captcha" placeholder="验证码">
<span id="captcha" onclick="getCaptcha()">span><br>
<input type="submit" id="newVailcode" value="提交">
form>
div>
<script>
var capCode = getCaptcha();
function getCaptcha() {
var cap = Math.floor(Math.random() * 10000).toString();
if (cap.length != 4) {
cap += "0";
}
document.getElementById("captcha").innerHTML = cap;
return capCode = cap;
}
function validateForm() {
var captchaInput = document.querySelector("input[name='captcha']").value;
if (captchaInput == "") {
alert("请输入验证码");
return false; // 阻止表单提交
} else if (capCode != captchaInput) {
alert("验证码不正确");
return false; // 阻止表单提交
}
alert("验证码正确")
return true; // 允许表单提交
}
script>
body>
html>
必填字段验证在用户注册时比较常见,通过必填字段验证,能够确保表单中的必填字段都被填写,例如用户名、密码、邮箱等。
示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>必填字段验证title>
<style>
.error{
color: red;
}
style>
head>
<body>
<form onsubmit="return validateForm()" action="" method="post">
<fieldset style="text-align: center;width: 300px;position: relative">
<legend>注册:legend>
<div class="row">
<label>账 号:label>
<input type="text" name="name">
<span class="error" id="nameErr">span>
div>
<div class="row">
<label>密 码:label>
<input type="password" name="pwd">
<span class="error" id="pwdErr">span>
div>
<div class="row">
<label>邮 箱:label>
<input type="text" name="email">
<span class="error" id="emailErr">span>
div>
<div class="row">
<label>电 话:label>
<input type="text" name="mobile" maxlength="11">
<span class="error" id="mobileErr">span>
div>
<div class="row">
<label>验证码:label>
<input type="text" name="captcha" maxlength="4" style="width: 120px;">
<span id="captcha" onclick="getCaptcha()">span>
<span class="error" id="captchaErr">span>
div>
<div class="row">
<input type="submit" value="注册">
div>
fieldset>
form>
<script>
// 生成验证码
var captcha = getCaptcha();
// 获取验证码
function getCaptcha(){
var cap = Math.floor(Math.random()*10000).toString();
if(cap.length != 4) cap += "0";
captcha = cap;
document.getElementById("captcha").innerHTML = cap;
}
// 显示错误消息
function printError(elemId, hintMsg) {
document.getElementById(elemId).innerHTML = hintMsg;
}
// 验证表单数据
function validateForm() {
// 获取表单元素的值
var name = document.querySelector("input[name='name']").value;
var pwd = document.querySelector("input[name='pwd']").value;
var email = document.querySelector("input[name='email']").value;
var mobile = document.querySelector("input[name='mobile']").value;
var captcha = document.querySelector("input[name='captcha']").value;
if(name == "" || name == null){
printError("nameErr", "用户名不能为空");
return false;
}
if(pwd == "" || pwd == null){
printError("pwdErr", "密码不能为空");
return false;
}
if(email == "" || email == null){
printError("emailErr", "邮箱不能为空");
return false;
}
if(mobile == "" || mobile == null){
printError("mobileErr", "手机号不能为空");
return false;
}
if(captcha == "" || captcha == null){
printError("captchaErr", "验证码不能为空");
return false;
}
}
// 清空 input 标签后的提示信息
var tags = document.getElementsByTagName('input');
for (var i = 0; i < tags.length; i++) {
//元素内容发生改变触发onchange事件
tags[i].onchange = function(){
//this.name 获取标签的name属性
var idname = this.name + "Err";
document.getElementById(idname).innerHTML = '';
}
}
script>
body>
html>
数据格式验证就是通过正则表达式来验证用户所填的数据,是否符合要求,以邮箱地址为例,正确的邮箱地址中要包含一个@
和一个.
,而且@
不能是邮箱地址的第一个字符,.
要出现在@
之后。
示例代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数据格式验证title>
<style>
.error{
color: red;
font-size: 10px;
}
style>
head>
<body>
<form onsubmit="return validateForm()" action="" method="post">
<fieldset style="text-align: center;width: 350px;position: relative">
<legend>注册:legend>
<div class="row">
<label>账 号:label>
<input type="text" name="name"><br>
<span class="error" id="nameErr">span>
div>
<div class="row">
<label>密 码:label>
<input type="password" name="pwd"><br>
<span class="error" id="pwdErr">span>
div>
<div class="row">
<label>邮 箱:label>
<input type="text" name="email"><br>
<span class="error" id="emailErr">span>
div>
<div class="row">
<label>电 话:label>
<input type="text" name="mobile" maxlength="11"><br>
<span class="error" id="mobileErr">span>
div>
<div class="row">
<label>验证码:label>
<input type="text" name="captcha" maxlength="4" style="width: 120px;">
<span id="captcha" onclick="getCaptcha()">span><br>
<span class="error" id="captchaErr">span>
div>
<div class="row">
<input type="submit" value="注册">
div>
fieldset>
form>
<script>
// 生成验证码
var capCode = getCaptcha();
// 获取验证码
function getCaptcha(){
var cap = Math.floor(Math.random()*10000).toString();
if(cap.length != 4) cap += "0";
document.getElementById("captcha").innerHTML = cap;
return capCode = cap;
}
// 清空 input 标签后的提示信息
var tags = document.getElementsByTagName('input');
for (var i = 0; i < tags.length; i++) {
tags[i].onchange = function(){
var idname = this.name + "Err";
document.getElementById(idname).innerHTML = '';
}
}
// 显示错误消息
function printError(elemId, hintMsg) {
document.getElementById(elemId).innerHTML = hintMsg;
}
// 验证表单数据
function validateForm() {
// 获取表单元素的值
var name = document.querySelector("input[name='name']").value;
var pwd = document.querySelector("input[name='pwd']").value;
var email = document.querySelector("input[name='email']").value;
var mobile = document.querySelector("input[name='mobile']").value;
var captcha = document.querySelector("input[name='captcha']").value;
if(name == "" || name == null){
printError("nameErr", "用户名不能为空");
return false;
}
if(pwd == "" || pwd == null){
printError("pwdErr", "密码不能为空");
return false;
}
if(email == "" || email == null){
printError("emailErr", "邮箱不能为空");
return false;
} else {
var regex = /^\S+@\S+\.\S+$/;
if(regex.test(email) === false) {
printError("emailErr", "请输入正确的邮箱地址");
return false;
}
}
if(mobile == "" || mobile == null){
printError("mobileErr", "手机号不能为空");
return false;
}
if(captcha == "" || captcha == null){
printError("captchaErr", "验证码不能为空");
return false;
} else {
console.log(capCode);
console.log(captcha);
if(capCode != captcha){
printError("captchaErr", "验证码有误");
return false;
}
}
}
script>
body>
html>
jQuery是一个JavaScript第三方模块(第三方类库)。
下载jQuery
https://jquery.com/
应用jQuery
简单案例:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1 id="txt">中国你好h1>
<script src="static/js/code.jquery.com_jquery-3.7.0.min.js">script>
<script>
// 利用jquery中功能实现修改页面内容
// 找到id=txt的标签,进行内容修改
// jquery的方法,比dom方法简单
$("#txt").text("美国你好");
// dom的方法
document.getElementById("txt").innerText = "英国你好";
script>
body>
html>
ID选择器
<h1 id="txt">中国联通h1>
<h1>中国联通h1>
<h1>中国联通h1>
$("#txt")
样式选择器
<h1 class="c1">中国联通1h1>
<h1 class="c1">中国联通2h1>
<h1 class="c2">中国联通3h1>
$(".c1")
标签选择器
<h1 class="c1">中国联通1h1>
<div class="c1">中国联通2h1>
<h1 class="c2">中国联通3h1>
$("h1")
层级选择器
<h1 class="c1">中国联通1h1>
<h1 class="c1">
<div class="c2">
<span>span>
<a>a>
div>
h1>
<h1 class="c2">中国联通3h1>
$(".c1 .c2 a")
多选择器
<h1 class="c1">中国联通1h1>
<h1 class="c1">
<div class="c3">
<span>span>
<a>a>
div>
h1>
<h1 class="c2">中国联通3h1>
<ul>
<li>xxli>
<li>xxli>
ul>
$("#c3,#c2,li")
属性选择器
<input type='text' name="n1" />
<input type='text' name="n1" />
<input type='text' name="n2" />
$("input[name='n1']")
找同级兄弟标签
<div>
<div>北京div>
<div id='c1'>上海div>
<div>深圳div>
<div>广州div>
div>
$("#c1").prev() // 上一个
$("#c1")
$("#c1").next() // 下一个
$("#c1").next().next() // 下一个、下一个
$("#c1").siblings() // 所有的同级兄弟
找父子
<div>
<div>
<div>北京div>
<div id='c1'>
<div>青浦区div>
<div class="p10">宝山区div>
<div>浦东新区div>
div>
<div>深圳div>
<div>广州div>
div>
<div>
<div>陕西div>
<div>山西div>
<div>河北div>
<div>河南div>
div>
div>
$("#c1").parent() // 父亲
$("#c1").parent().parent() // 父亲、父亲
$("#c1").children() // 所有的儿子
$("#c1").children(".p10") // 所有的儿子中寻找class=p10
$("#c1").find(".p10") // 去所有子孙中寻找class=p10
$("#c1").find("div") // 去所有子孙中寻找div
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
.menu {
width: 200px;
height: 800px;
border: 1px solid red;
}
.menu .header {
background: yellow;
/*内边距 上下10px,左右5px*/
padding: 10px 5px;
border-bottom: 1px red solid;
/*鼠标样式修改为小手*/
cursor: pointer;
}
.menu .content a {
display: block;
padding: 5px 5px;
/*虚线*/
border-bottom: 1px dotted brown;
}
/*隐藏显示*/
.hide {
display: none;
}
style>
head>
<body>
<div class="menu">
<div class="item">
<div class="header" onclick="click_me(this)">上海div>
<div class="content hide">
<a href="#">宝山a>
<a href="#">宝山a>
<a href="#">宝山a>
div>
div>
<div class="item">
<div class="header" onclick="click_me(this)">北京div>
<div class="content hide">
<a href="#">海淀a>
<a href="#">海淀a>
<a href="#">海淀a>
<a href="#">海淀a>
div>
div>
div>
<script src="static/js/code.jquery.com_jquery-3.7.0.min.js">script>
<script>
function click_me(self){
// $(self) -> 表示当前点击的那个标签。
// $(self).next() 下一个标签
// $(self).next().removeClass("hide"); 删除样式
$(self).next().removeClass("hide");
}
script>
body>
html>
<script>
function click_me(self){
var is_hide = $(self).next().hasClass("hide")
if (is_hide){
// 如果有hide标签则去除hide
$(self).next().removeClass("hide")
}
else{
// 没有hide 标签则添加
$(self).next().addClass("hide")
}
}
script>
<script>
function click_me(self){
// 将点击的标签下的content标签去除hide标签,以显示自己标题下面的内容
$(self).next().removeClass("hide");
// 找到父级item的其他所有同级item里的content标签然后再添加hide标签,隐藏内容
$(self).parent().siblings().find(".content").addClass("hide")
}
script>
<div id='c1'>内容div>
$("#c1").text() // 获取文本内容
$("#c1").text("休息") // 设置文本内容
<input type='text' id='c2' />
$("#c2").val() // 获取用户输入的值
$("#c2").val("哈哈哈") // 设置值
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<input type="text" id="txt_user" placeholder="用户名">
<input type="text" id="txt_email" placeholder="邮箱">
<input type="button" value="提交" onclick="get_info()">
<ul id="view">
ul>
<script src="static/js/code.jquery.com_jquery-3.7.0.min.js">script>
<script>
function get_info() {
// 获取用户输入的用户名和密码
var user_name = $("#txt_user").val();
var user_email = $("#txt_email").val();
var data = user_name + "和" + user_email;
// 创建li标签,在li内容写入内容
var new_li = $("" ).text(data);
// 把新创建li标签添加到ul里面
$("#view").append(new_li)
}
script>
body>
html>
比dom的代码量减少
<input type="button" value="提交" onclick="getInfo()"/>
<script>
function getInfo() {
}
script>
<ul>
<li>百度li>
<li>谷歌li>
<li>搜狗li>
ul>
<script>
$("li").click(function(){
// 点击li标签时,自动执行这个函数;
// $(this) 当前你点击的是那个标签。
});
script>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<ul>
<li>百度li>
<li>谷歌li>
<li>搜狗li>
ul>
<script src="static/jquery-3.6.0.min.js">script>
<script>
$("li").click(function () {
var text = $(this).text();
console.log(text);
});
script>
body>
html>
在jQuery中可以删除某个标签。
<div id='c1'>内容div>
$("#c1").remove();
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<ul>
<li>百度li>
<li>谷歌li>
<li>搜狗li>
ul>
<script src="static/jquery-3.6.0.min.js">script>
<script>
$("li").click(function () {
$(this).remove();
});
script>
body>
html>
当页面框架加载完成之后执行代码:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<ul>
<li>百度li>
<li>谷歌li>
<li>搜狗li>
ul>
<script src="static/jquery-3.6.0.min.js">script>
<script>
$(function () {
// 当页面的框架加载完成之后,自动就执行。
$("li").click(function () {
$(this).remove();
});
});
script>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<table border="1">
<thead>
<tr>
<th>idth>
<th>姓名th>
<th>操作th>
tr>
thead>
<tbody>
<tr>
<td>001td>
<td>怀志华1td>
<td><input type="button" value="删除" class="delete">td>
tr>
<tr>
<td>002td>
<td>怀志华2td>
<td><input type="button" value="删除" class="delete">td>
tr>
<tr>
<td>001td>
<td>怀志华3td>
<td><input type="button" value="删除" class="delete">td>
tr>
tbody>
table>
<script src="static/js/code.jquery.com_jquery-3.7.0.min.js">script>
<script>
$(function () {
// 找到所有class=delete的标签,绑定事件
$(".delete").click(function () {
// 找到tr,删除当前行数据
$(this).parent().parent().remove()
})
})
script>
body>
html>
前提准备
导入标准流程
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<link rel="stylesheet" href="static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">
<link rel="stylesheet" href="static/plugins/font-awesome-4.7.0/css/font-awesome.css">
head>
<body>
<script src="static/js/code.jquery.com_jquery-3.7.0.min.js">script>
<script src="static/plugins/bootstrap-3.4.1-dist/js/bootstrap.js">script>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数据录入title>
<link rel="stylesheet" href="static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">
<link rel="stylesheet" href="static/plugins/bootstrap-datepicker/css/bootstrap-datepicker.css">
head>
<body>
<div class="container">
<form class="form-horizontal" style="margin-top: 50px;border: 2px solid black;padding: 10px">
<div class="row clearfix">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-2 control-label">姓名label>
<div class="col-sm-10">
<input type="text" placeholder="姓名">
div>
div>
div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-2 control-label">年龄label>
<div class="col-sm-10">
<input type="text" placeholder="年龄">
div>
div>
div>
div>
<div class="row clearfix">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-2 control-label">薪资label>
<div class="col-sm-10">
<input type="text" placeholder="薪资">
div>
div>
div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-2 control-label">部门label>
<div class="col-sm-10">
<select class="<